Я уже видел это идентичный < strong> противоположный вопрос и его пример кода OP кажутся мне совершенно нормальными. Я также читал (включая документацию по PHP), что сеанс можно проверить с помощью session_status()
на PHP ›= 5.4, и это должно быть хорошо, прежде чем вызывать session_start()
, чтобы определить, существует ли он уже.
Теперь я использую PHP 5.4.16 на машине CentOS 7.10, и session_status()
всегда возвращает 1 (PHP_SESSION_NONE)
для меня, только когда я перезагружаю страницу с помощью этого примера:
<?php
$status = session_status();
session_start();
echo "The session status is : $status";
Я ожидаю, что он вернет PHP_SESSION_ACTIVE (2)
, когда я перезагружаю страницу (и я не выполняю принудительную перезагрузку с очисткой кеша). Я использую последнюю версию Chrome, и страница встроена в виртуальный хост с HTTPS через порт 8443.
Я проверил версию PHP как с php --version
, так и с помощью phpinfo()
скрипта, чтобы на всякий случай исключить конфликт версий, и они такие же. Кроме того, когда я посещаю страницу сценария сеанса, сервер создает пустые файлы в каталоге /var/lib/php/session
. Я не менял настройки PHP по умолчанию для сеанса или чего-то еще.
Чтобы прояснить: session_status()
работает нормально, если впоследствии проверяется при выполнении того же сценария (The session status is : 2
), но, естественно, меня это не интересует, поскольку я хочу сначала проверить, существует ли сеанс.
Что могло быть не так?
PHP_SESSION_NONE if sessions are enabled, but none exists.
из документации означает, что я могу ошибаться, что ваша конфигурация разрешила сеанс, поэтому вы не получаете0 (PHP_SESSION_DISABLED)
, но ваш сеанс еще не запущен. В результате вы получитеPHP_SESSION_NONE
. - person Frankich   schedule 13.10.2020