检测PHP会话是否存在

时间:2010-08-21 18:54:12

标签: php session

Facebook现在为用户提供订阅,以便您可以获得有关更改的实时更新。如果我的应用收到更新,我打算将其存储在数据库中。我还想检测他们的会话是否存在。如果确实如此,那么我也可以在那里更新数据。

我的会话ID是MD5(fb_id + secret),所以我可以轻松编辑他们的会话。问题是如何检测会话是否存在。

6 个答案:

答案 0 :(得分:50)

我使用合并版本:

if(session_id() == '' || !isset($_SESSION)) {
    // session isn't started
    session_start();
}

答案 1 :(得分:34)

根据PHP.net manual

  

如果使用$_SESSION(或{4.0}或更低版本的$HTTP_SESSION_VARS),请使用isset()检查变量是否已在$_SESSION中注册。

答案 2 :(得分:17)

如果您使用的是PHP 5.4+,则使用session_status()更加清晰:

if (session_status() == PHP_SESSION_ACTIVE) {
  echo 'Session is active';
}
    如果会话被禁用,则
  • PHP_SESSION_DISABLED
  • PHP_SESSION_NONE如果会话已启用,但不存在。
  • PHP_SESSION_ACTIVE如果会话已启用且存在会话。

答案 3 :(得分:1)

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 :(得分:1)

使用哪种方法检查SESSION是否存在? 答案:

isset($_SESSION['variable_name'])

示例:

isset($_SESSION['id'])

答案 5 :(得分:0)

原始代码来自Sabry Suleiman

使其更漂亮:

function is_session_started() {

    if ( php_sapi_name() === 'cli' )
        return false;

    return version_compare( phpversion(), '5.4.0', '>=' )
        ? session_status() === PHP_SESSION_ACTIVE
        : session_id() !== '';
}

第一个条件检查正在使用的Server API。如果使用命令行界面,则该函数返回false。

然后我们根据使用的PHP version返回布尔结果。

在古代历史中,您只需要检查session_id()。如果为空字符串,则会话不会启动。否则。

从5.4至少到当前的8.0,规范是检查session_status()。如果不是PHP_SESSION_ACTIVE,则说明会话尚未开始(PHP_SESSION_NONE)或会话完全不可用(PHP_SESSION_DISABLED)。