检测PHP会话是否存在

检测PHP会话是否存在,php,session,Php,Session,Facebook现在向用户提供订阅服务,这样您就可以实时更新更改。如果我的应用程序收到更新,我计划将其存储在数据库中。我还想检测他们的会话是否存在。如果是这样的话,我也可以更新那里的数据 我的会话id是MD5(fb_id+secret),因此我可以轻松编辑他们的会话。问题是如何检测会话是否存在。根据: 如果使用了$\u SESSION(或$HTTP\u SESSION\u VARS用于PHP 4.0.6或更低版本),则使用检查变量是否已在$\u SESSION中注册 我使用一个组合版本: if(

Facebook现在向用户提供订阅服务,这样您就可以实时更新更改。如果我的应用程序收到更新,我计划将其存储在数据库中。我还想检测他们的会话是否存在。如果是这样的话,我也可以更新那里的数据

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

根据:

如果使用了
$\u SESSION
(或
$HTTP\u SESSION\u VARS
用于PHP 4.0.6或更低版本),则使用检查变量是否已在
$\u SESSION
中注册


我使用一个组合版本:

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

如果您使用的是php 5.4+,那么使用它会更干净:

  • PHP\u SESSION\u禁用
    如果会话被禁用
  • PHP\u SESSION\u NONE
    如果启用了会话,但不存在会话
  • PHP\u SESSION\u ACTIVE
    如果启用了会话,并且存在一个会话

使用哪种方法检查会话是否存在? 答复:

例如:

isset($_SESSION['id'])
原始代码来自

让它更漂亮一点:

函数是\u会话\u已启动(){
如果(php_sapi_name()=='cli')
返回false;
返回版本比较(phpversion(),'5.4.0','>=')
?会话\u状态()==PHP\u会话\u活动
:session_id()!='';
}
第一个条件检查正在使用的。如果使用命令行接口,则函数返回false

然后根据使用中的参数返回布尔结果

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


从5.4到至少当前的8.0,标准是检查
session\u status()
。如果未激活
PHP\u SESSION\u
,则会话尚未启动(
PHP\u SESSION\u NONE
),或者会话不完全可用(
PHP\u SESSION\u DISABLED
)。

您指的是谁的会话?从哪里来?谁创造的?秘密散列是什么意思?如果它是一个正确的散列,你无法获取FBU id。用户会话,从我的服务器,由我的服务器创建。。。对不起,我以为这是个错误given@Pablo如果您的服务器已经创建了会话,为什么需要我们的帮助来检测它是否存在?我不明白。您的意思是,您正在接收更新的用户是否在您的终端上有会话?只有你的用户管理层才能知道,不是吗?我同意Pekka的观点,为什么你真的需要知道会话是否存在?如果您总是以相同的方式创建会话,那么您就不能检查会话中存储的某个变量是否存在吗?这是一个简单的isset($\u SESSION['var'])真的。我想这会帮助其他偶然发现这个答案的人:为什么要使用比较运算符
=
而不是标识运算符
==
?两者都返回整数…@micaball
=
运算符表示“值相等”。
==
运算符表示“值和类型相等”。在这个比较中,我们只寻找真/假值,因此
=
是更好的选择。@micaball(太多)许多php函数可以返回混合的值类型(经典的是
strpos()
)。在这种情况下,检查值类型是有意义的
session_status()
总是返回一个
int
,因此不需要。:)您应该在代码中添加描述,即使简短。不赞成只写代码而不解释的帖子:)公平地说,代码几乎是不言自明的。谢谢你的片段。
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();
isset($_SESSION['variable_name'])
isset($_SESSION['id'])