Я полностью осознаю, что рекомендуется просто использовать SSL на всем сайте. Однако, безусловно, есть уникальные случаи, когда возможность выбирать между HTTP и HTTPS может пригодиться.
Я столкнулся с сценарием, похожим на @Dsavid Gardner. Моя компания использует стороннего поставщика для управления частью нашего сайта на нашем магазине, и этот магазин находится на поддомене "https://store.mysite.com". У нас есть 15-летний видео-контент, и наш текущий поставщик видео-менеджмента ломается, когда видео встроенный в SSL. (Я предполагаю, что он тянет ресурсы из доменов HTTP, но это еще одна проблема для другого дня)
Конечно, я мог бы купить SSL и пройти процедуру отладки двух сторонних поставщиков, а также выполнить поиск и замену во всей нашей базе данных (или взлом файла .htaccess, но я отступил), чтобы исправить любые ссылки на ресурсы HTTP, просто чтобы иметь возможность иметь в заголовке сообщение «Добро пожаловать,« Ваше имя »», но это кажется излишним.
Вот простое решение Javascript, которое я придумал, которое устанавливает небезопасный файл cookie для всего сайта на основе уже установленных безопасных файлов cookie.
Во-первых, Я взял некоторые функции javascript cookie . Идите вперед и поместите этот код в безопасную часть вашего сайта:
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)===' ') {
c = c.substring(1,c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length,c.length);
}
}
return null;
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
/* Note, the W3 documents where I got this code didn't include the
option to set the domain. I added this and it allows the cookie
to be shared across sub-domains. Be sure not to add "www" */
document.cookie = cname + "=" + cvalue + "; " + expires + "; domain=.yourdomain.com";
}
/*Now we check our cookies on our secure server to find out if the user is
logged in or not. In my case, the First Name is stored as a cookie. */
var firstNameCookie = readCookie("the-secure-cookie-name");
//
if(!firstNameCookie){
/* If the cookie doesn't exist, then the person isn't logged in. Add
conditional logic here if you'd like (such as deleting any current
logged in cookies from the HTTP portion of the site) */
}
else {
/* otherwise, we have a successful login. By grabbing the cookie via
this javascript resting on the secure server, we haven't compromised our
security. However, if we set a cookie with javascript right now, it
won't be a secure cookie by default and we'll have access to it with
HTTP on the subdomain */
setCookie("HTTPfirstName", firstNameCookie, 1.5);
}
*/The clients first name is now accessible across subdomains in the cookie
entitled "HTTPfirstName" */
В этом случае единственное, что мы просочились на наш HTTP-сервер, - это имя клиента. Однако, если вы хотите еще большей безопасности, вы можете настроить параметры своего сервера таким образом, чтобы доступ к определенным файлам cookie (например, «firstNameCookie») осуществлялся по HTTP-запросу, и это добавляет дополнительный уровень защиты. сделать это здесь
Конечно, это не самое идеальное решение. В будущем я планирую реализовать SSL для всего сайта, но, тем не менее, неплохо иметь простую функцию javascript для ее замены.