©
本文档使用 PHP中文网手册 发布
(PHP >=5.4.0)
session_status — Returns the current session status
session_status() is used to return the current session status.
PHP_SESSION_DISABLED
if sessions are disabled. PHP_SESSION_NONE
if sessions are enabled, but none exists. PHP_SESSION_ACTIVE
if sessions are enabled, and one exists. [#1] sasi dot viragelet at gmail dot co [2015-02-01 22:45:20]
Maybe depending on PHP settings, but if return values are not the above, then go for this:
_DISABLED = 0
_NONE = 1
_ACTIVE = 2
[#2] Ollea [2014-01-29 23:02:10]
If you started and closed a session then test ( session_id() === '' ) to check if a session is active it won't work, session_id() returns an ID even if the session is closed.
Anybody knows another way before PHP 5.4 to check if a session is really not currently active ?
[#3] coder dot ua at gmail dot com [2013-10-15 14:13:10]
Universal function for checking session status.
<?php
function is_session_started()
{
if ( php_sapi_name() !== 'cli' ) {
if ( version_compare(phpversion(), '5.4.0', '>=') ) {
return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
} else {
return session_id() === '' ? FALSE : TRUE;
}
}
return FALSE;
}
// Example
if ( is_session_started() === FALSE ) session_start();
?>
[#4] php at kenman dot net [2013-08-02 15:45:02]
The purpose of this functionality can aid you specifically in cases where code -- prior to your current code -- might have opened a session and then closed it.
Specifically, depending on $_SESSION, session_id(), and the SID constant to determine if a session is active will FAIL if a session has previously been opened & closed within the same request cycle.
Please see the original bug report here:
https://bugs.php.net/bug.php?id=52982
[#5] php at pointpro dot nl [2013-04-16 07:06:00]
The advice of ive_insomnia at live dot com should be taken with great care.
First of all, while his use case for session_status is valid, a simpler way to avoid the warning is:
<?php
if (!isset($_SESSION)) { session_start(); }
?>
The example of session_status uses the raw values of constants (2 in this case) created specifically for the purpose of not having to use magic numbers.
Better code would be:
<?php
if (session_status() !== PHP_SESSION_ACTIVE) {session_start();}
?>
The same can be done using
<?php
if (session_id() === "") { session_start(); }
?>
The use of this function is lies more towards status management: change the behavior of a script when sessions are disabled altogether, for example.