Руководство по статусу сеанса PHP

Contents

session_status

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

session_status — возвращает текущий статус сеанса

Описание

session_status () используется для возврата текущего статуса сеанса.

Возвращаемые значения

  • PHP_SESSION_DISABLED если сеансы отключены.
  • PHP_SESSION_NONE если сеансы включены, но их нет.
  • PHP_SESSION_ACTIVE если сеансы включены, а один существует.

Смотрите также

  • session_start () — Начать новую или возобновить существующую сессию

Заметки, внесенные пользователями 9 заметок

Универсальная функция для проверки статуса сеанса.

/ **
* @return bool
* /
функция is_session_started ()
<
если (php_sapi_name ()! == ‘cli’) <
если (версия_сравнения (phpversion (), ‘5.4.0’, ‘>знак равно <
return session_status () === PHP_SESSION_ACTIVE? ИСТИНА: ЛОЖЬ;
> еще <
вернуть session_id () === »? FALSE TRUE ;
>
>
вернуть ЛОЖЬ;
>

// Пример
если (is_session_started () === FALSE) session_start ();
?>

Используйте always session_status (), чтобы проверить, запущен ли уже сеанс и активен ли он..
если (session_status ()! == PHP_SESSION_ACTIVE) session_start ();
или же
если (session_status () === PHP_SESSION_NONE) session_start ();

Не использовать
если (! isset ($ _ SESSION)) session_start ();
или же
если (session_id () === "") session_start ();

Они не будут работать должным образом после вызова session_write_close ().
Обе функции будут продолжать сообщать, что сеанс существует..
И это правильно, вы можете читать из $ _SESSION, но если вы хотите написать,
вам снова нужен session_start ().

В качестве сокращения вы можете использовать
@session_start ()
с @ в начале, чтобы подавить
Уведомление о PHP "Сеанс уже был запущен — игнорирование session_start ()"

Как указано в руководстве для session_start (), второй вызов не причинит вреда,
это будет просто проигнорировано. Но вам нужен @, если вы не хотите получать уведомление.

К советам ive_insomnia в live dot com следует относиться с большой осторожностью..

Прежде всего, хотя его вариант использования session_status действителен, более простой способ избежать предупреждения:

если (! isset ($ _SESSION)) < session_start (); >
?>

В примере session_status используются необработанные значения констант (в данном случае 2), созданные специально для того, чтобы не использовать магические числа..

Лучшим кодом будет:

если (session_status ()! == PHP_SESSION_ACTIVE) < session_start ();>
?>

То же самое можно сделать, используя

Использование этой функции больше связано с управлением статусом: изменение поведения скрипта, когда сеансы полностью отключены, например.

Еще одна функция, чтобы определить, начался ли сеанс:

функция is_session_started () <
вернуть function_exists (‘session_status’)? (PHP_SESSION_ACTIVE == session_status ()): (! Пусто (session_id ()));
>

Похожие статьи