Я управляю веб-сайтом (одностраничным приложением) с помощью пользовательского кода сеанса, управляемого командой, к которой у меня нет доступа. Приложение создано с использованием appweb и не похоже на другие общедоступные веб-сайты. Это приложение было подано как в http и https. При этом после входа в http, если пользователь входит в https, атрибут secure не устанавливается, несмотря на следующий код.
$https = $_SERVER['SERVER_PROTOCOL'] == 'https' ? 1 : 0;
ini_set("session.cookie_secure", $https);
//or
session_set_cookie_params(0, '/', null, $https, 1);
Итак, я переписал сессионный cookie, как показано ниже, с помощью приведенного выше кода. Это сработало.
$sessname = session_name();
setcookie($sessname, $_COOKIE[$sessname], 0, '/', null, $https, 1);
Аномалия возникает при открытии как http, так и https в двух вкладках, что приводит к тому, что любая из сессий недопустима, причина пользовательского кода. Хотя это негативный сценарий, это может вызвать замешательство у пользователя, если он поступит так, как описано выше.
Я знаю, что есть другие варианты, чтобы обойти это, и я использовал такие, как перенаправление. И все же я хотел проверить, хорошо ли работает мой заместитель.
Теперь, что я думал как альтернатива, следующее.
$https = $_SERVER['SERVER_PROTOCOL'] == 'https' ? 1 : 0;
$sessname = session_name();
$domain = $_SERVER['SERVER_PROTOCOL'].'.'.$_SERVER['REMOTE_ADDR'];
setcookie($sessname, $_COOKIE[$sessname], 0, '/', $domain, $https, 1);
Здесь я установил другое доменное имя для http и https для одного и того же идентификатора сеанса. при входе в http идентификатор сеанса php будет иметь домен как http.10.10.10.1, а при входе в систему через https для идентификатора сеанса php домен будет иметь значение https.10.10.10.1. Это работает.
Это правильный путь. Будут ли какие-либо побочные эффекты?
Почему бы вам просто не перенаправить каждый http-запрос на https? Используя PHP или htaccess:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
В противном случае, я думаю, вы могли бы посмотреть на подобные вопросы:
Сессия потеряна при переключении с HTTP на HTTPS в PHP
Переключение между страницами HTTP и HTTPS с безопасным cookie-файлом сессии
Cookie через HTTP и HTTPS в PHP
Других решений пока нет …