В запросе есть несколько разных способов определить, был ли запущен сеанс, например:
$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, чтобы исправить это: "Открыть статус сеанса с помощью новой функции session_status"
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
EDIT 12/5/11: session_status() в руководстве по PHP.