Почему сеанс PHP не работает в некоторых браузерах? - PullRequest
1 голос
/ 01 августа 2020

У меня проблемы с сеансами PHP, но только в моем браузере (Google Chrome v.84.0.4147.105, 64 бита). Похоже, что сеанс не сохраняется. Например, для этого кода:

 session_start();
$_SESSION['hello'] = 'world';
echo 'hello ' . $_SESSION['hello'];

echo '<br>ID: ' . session_id();

В любом браузере получите:

hello world ID: ksr9shdsjnpenhv23ldtfqvwc2

И то же самое, если я перезагружу страницу. Но для своего браузера я получаю другой идентификатор сеанса каждый раз при перезагрузке страницы, а переменная $ _SESSION ['world'] недоступна для других файлов.

Есть идеи? Перед session_start () ничего нет, на самом деле эти строки представляют собой весь файл

1 Ответ

1 голос
/ 02 августа 2020

посмотрите в своем PHP там установлено:

php_value session.use_cookies = 1

, и оба

php_value session.use_only_cookies 1
php_value session.use_trans_sid 0

являются значениями по умолчанию, поэтому вы не найдете их там.
тогда php попытается сохранить идентификатор сеанса в cook ie, но безуспешно, поэтому каждый раз вы будете получать новый идентификатор сеанса. если вы не хотите зависеть от настройки ie повара и не возражаете против более длинного URL-адреса, вы можете указать это:

ini_set('session.use_only_cookies', '0');
ini_set('session.use_trans_sid','1');
session_start();

теперь php попытается сохранить сеанс как повар ie и если это не удается, как переменная получения с именем PHPSESSID, и ваш URL-адрес станет немного длиннее. Вы можете изменить имя этой переменной, установив session.name.

В этот момент вы можете защитить себя, используя скрытую переменную POST, которая хранит, например, md5 этой переменной, и вы можете каждый раз контролировать, если сессия была изменена ...

хорошая привычка также состоит в том, чтобы сохранять sessionid и IP в таблице сессий в базе данных и каждый раз проверять GET POST и Database и IP, поют ли они одну и ту же песню.

добро пожаловать на кухню ie кухню; -)

...