По желанию, есть несколько различных способов, которыми вы можете сказать, работает ли или нет сессии, такие как:Как узнать, активен ли сеанс?
$isSessionActive = (session_id() != "");
Или:
$isSessionActive = defined('SID');
Однако эти и привести к сбою запустите сеанс, затем закройте его; session_id()
вернет идентификатор предыдущей сессии, а SID
будет определен. Аналогично, при вызове session_start()
в этом месте будет генерироваться E_NOTICE
, если у вас уже есть сеанс. Есть ли разумный способ проверить, активен ли сеанс в настоящий момент, не прибегая к буферизации вывода, оператору запирания (@session_start()
) или чему-то еще в равной степени хакерским?
EDIT: я написал патч, чтобы попытаться получить эту функцию, включенную в PHP: http://bugs.php.net/bug.php?id=52982
EDIT 8/29/2011: Новая функция добавлена в PHP 5.4, чтобы исправить это: "Expose session status via new function, session_status"
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
EDIT 12/5/11: session_status() в руководстве по PHP.
Возможно, это хакеры: ['session_is_active()'] (http://stackoverflow.com/questions/3788369/how-to-tell-if-a-session-is-active/7656468#7656468), но по крайней мере, что-то я нашел. Спасибо за сообщение об ошибке в любом случае, приятно видеть это в 5.4. – hakre
Все еще актуальный вопрос с добавлением 5.4, поскольку я только что нажал на поле 5.3 и нашел 'session_status()' missing! – quickshiftin
Это, безусловно, странно, поскольку оно действительно присутствует на моей сборке 5.4. Areyou говорит, что вы используете 5.3 или 5.4? Является ли это обычным или предварительно созданным двоичным кодом PHP? В 'phpinfo()', есть ли у вас раздел «сеанс»? В действии: http://codepad.viper-7.com/PiZmcw – ken