У меня была эта проблема при использовании WAMPSERVER для разработки на / localhost. Мне нужно было изменить session.use_only_cookies
либо в строке, либо в настройке php.ini
с
session.use_only_cookies = 1
до
session.use_only_cookies = 0
Объяснение
Использование сеансов на основе файлов cookie по умолчанию работало, как и ожидалось, но мне нужно было решение без файлов cookie. Начальная страница теста:
<?php
// page1.php
ini_set('session.use_cookies', '0');
session_start();
$_SESSION['time'] = time();
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>
Данные сеанса были созданы и успешно сохранены во временном каталоге WAMPSERVER, например, C:\wamp\tmp\sess_0rkdlonl5uia717rf03d4svs16
. Ссылка, сгенерированная вышеуказанным кодом, выглядит примерно так (обратите внимание, что UID соответствует имени файла данных сеанса):
page2.php?PHPSESSID=0rkdlonl5uia717rf03d4svs16
Но целевая страница page2.php выдавала неопределенные ошибки для переменной «время» при попытке получить данные сеанса:
<?php
// page2.php
ini_set('session.use_cookies', '0');
session_start();
echo date('Y m d H:i:s', $_SESSION['time']);
echo '<br /><a href="page1.php?' . SID . '">page 1</a>';
?>
Установив session.use_only_cookies
FALSE в любом из сценариев до session_start();
:
ini_set('session.use_only_cookies', '0');
или глобально изменить его в php.ini
:
; This option forces PHP to fetch and use a cookie for storing and maintaining
; the session id. We encourage this operation as it's very helpful in combatting
; session hijacking when not specifying and managing your own session id. It is
; not the end all be all of session hijacking defense, but it's a good start.
; http://php.net/session.use-only-cookies
session.use_only_cookies = 0
решил проблему.