Я вызываю файл создания сеанса при каждой загрузке страницы. Он создает сеанс с парой переменных.
Когда я перехожу в подпапку, например: https://domainname.com/merchants/, он также использует тот же файл создания сеанса для создайте тот же сеанс и переменные.
Затем, когда я перейду из папки домена, т.е.: https://domainname.com/merchants/, и перейду в папку домена https://domainname.com/ , но не указывайте php-файл типа https://domainnamd.com/index.php, сессия обрывается.
Но когда я попал из подпапки в https: //имя_домена.com/index.php, сеансы сохраняются со всеми переменными.
Подозреваю, что при использовании мода перезапись и переходе в папку домена без нацеливания на конкретный файл, это эквивалент перенаправления, при котором запуск сеанса не вызывается на промежуточной странице, и в итоге мы оказываемся здесь https://domainname.com/ без наших переменных сеанса и нового идентификатора сеанса.
Кто-нибудь знает, почему это происходит?
Мой файл .htaccess (только важные биты):
Код: Выделить всё
RewriteEngine On
RewriteCond %{HTTP_HOST} !=localhost:8080
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header set Strict-Transport-Security "max-age=31536000;includeSubDomains; preload"
Header set Referrer-Policy: no-referrer
Header set X-Content-Type-Options nosniff
Header Set Permissions-Policy: geolocation=(self)
Header set Content-Security-Policy "upgrade-insecure-requests;"
Header always set X-Frame-Options SAMEORIGIN
RewriteRule !(\.gif|\.jpe?g|\.png|\.php|\.css|\.js|\.html|\.ihtml|\.htm)$ index.php [nocase,last]
Я перепробовал сотню способов, чтобы справиться с этим, но все равно ничего.
** обновление с информацией об инициализации сеанса. **
Следующий код вызывается для включаемого файла на каждой странице. Никакого другого начала сеанса больше нигде на сайте нет.
Я также использовал несколько версий тестирования с phprc и php.ini, указывающими на папку сеанса, путь к набору сеансов и домен сеанса. , при настройке куки или сессии это ничего не изменило. Он все еще делает это.
В некоторых случаях тестирования он фактически сохраняет сеанс в пользовательской папке сеанса в корневой папке домена, но не извлекает этот сеанс, а запускает новый. вместо.
Код: Выделить всё
session_start();
$this->SHOP_SESSION_ID = session_id();
if(!isset($_COOKIE['COOKIE_SESSION_ID']))
{
setcookie('COOKIE_SESSION_ID',
$this->SHOP_SESSION_ID, $this->EXPIRE_NUM_SECS);
}
if(!isset($_SESSION['SHOP_SESSION_ID']))
{
$_SESSION['SHOP_SESSION_ID'] = $this->SHOP_SESSION_ID;
define('SESS_ID', $this->SHOP_SESSION_ID);
define('SHOP_SESSION_ID', $this->SHOP_SESSION_ID);
}
else
{
define('SESS_ID', $this->SHOP_SESSION_ID);
define('SHOP_SESSION_ID', $this->SHOP_SESSION_ID);
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... -index-php