$ _SESSION создан, но нет $ PHPSESSID в $ _SERVER ['HTTP_COOKIE'] - PullRequest
7 голосов
/ 18 января 2012

У меня возникают странные проблемы с переменными SESSION в моей онлайн-корзине PHP / Ajax.

Когда я впервые просматриваю страницу, SESSION создается и работает на этой странице.Затем, когда я перехожу на другую страницу PHP в том же каталоге, сессия полностью теряется.Странно то, что это происходит только один раз .Как только пользователь проходит через этот процесс полной потери своей СЕССИИ при смене страницы, СЕССИЯ работает полностью по всей корзине.

Я начал отправлять по почте себе var_exports данных $ _SESSION и $ _SERVER на каждом просмотре страницы.Кажется, что когда страница впервые просматривается, СЕССИЯ существует и содержит данные.Однако в переменной $ _SERVER ['HTTP_COOKIE'] не генерируется PHPSESSID.При переходе на другую страницу создается PHPSESSID, и SESSION начинает работать, но исходные данные SESSION первого просмотра страницы теряются.

Есть ли способ сгенерировать PHPSESSID, если он еще не былсоздан для сессии?Или это типичное поведение, которое не имеет отношения к моей случайной проблеме потери СЕССИИ?Я использую PHP 5.2.

Каждая страница в корзине начинается точно так же:

$title="Title";
$keywords="keywords";
$description="description";
@include('../header_cart.php');

А затем в верхней части header_cart.php есть:

session_start();
if(!isset($_SESSION['active'])){
    $_SESSION['active']=$_SERVER['REMOTE_ADDR'];
}

Ответы [ 3 ]

1 голос
/ 22 января 2012

Вы переключаетесь между http: и https:? Иногда они рассматриваются как два отдельных домена, и ключ не может быть разделен между ними.

1 голос
/ 24 января 2012

Оказалось, что он распознавал mydomain.com и www.mydomain.com как отдельные сеансы и хранил 2 файла cookie с двумя разными PHPSESSID.

Я добавил это в свой файл .htaccess, чтобы всегда перенаправлять mydomain.com/shop на www.mydomain.com/shop для http и https.

RewriteEngine On

#force http://www. to make sure SESSION data is always the same
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{REQUEST_URI} shop
RewriteRule ^(.*)$ http://www.mydomain.com/shop/$1 [R,L]

#force https://www. to make sure SESSION data is always the same
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{REQUEST_URI} shop
RewriteRule ^(.*)$ https://www.mydomain.com/shop/$1 [R,L]
1 голос
/ 21 января 2012

Вы проверили, что нет вывода перед вашим вызовом session_start ()?(Даже не символ пробела!).

Заголовки HTTP не могут быть отправлены после сброса какого-либо вывода, что может привести к попытке сообщить клиенту исходный файл cookie сеанса.

...