Facebook现在向用户提供订阅功能,以便用户可以实时获得更新内容。如果我的应用程序接收到更新,我计划将其存储在数据库中。同时,我还希望检测他们的会话是否存在。如果存在,则我也可以在其中更新数据。
我的会话ID是MD5(fb_id + secret),所以我可以轻松地编辑他们的会话。问题是如何检测会话是否存在。
我使用的是组合版本:
if(session_id() == '' || !isset($_SESSION) || session_status() === PHP_SESSION_NONE) {
// session isn't started
session_start();
}
如果使用$_SESSION
(或者对于PHP 4.0.6或更低版本的$HTTP_SESSION_VARS
),请使用isset()
函数检查变量是否已在$_SESSION
中注册。
isset($_SESSION['varname'])
if (session_status() == PHP_SESSION_ACTIVE) {
echo 'Session is active';
}
PHP_SESSION_DISABLED
如果会话被禁用。PHP_SESSION_NONE
如果会话已启用但不存在。PHP_SESSION_ACTIVE
如果会话已启用且存在。==
而不是身份运算符===
?两者都返回整数... - Mike Casan Ballester==
运算符表示“相等的值”。===
运算符表示“相等的值和类型”。在这个比较中,我们只关注 true/false 值,所以 ==
是更好的选择。 - elbrantstrpos()
)。在这种情况下,检查值类型实际上是有意义的。session_status()
总是返回一个 int
,所以没有必要。 :) - Toto如何检查SESSION是否存在?
答案:
isset($_SESSION['variable_name'])
例子:
isset($_SESSION['id'])
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();
最短且简单的答案
$_SESSION['variable_name']?? die;
这是一种简单的方法
if(isset($_session['variable'])){
// do something
}else{
die;
}
原始代码来自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() !== '';
}
第一个条件检查正在使用的服务器API。如果使用命令行界面,则函数返回false。
然后,我们根据正在使用的PHP版本返回布尔结果。
在古代历史上,您只需要检查session_id()
。如果它是空字符串,则会话未启动。否则就是已经启动了。
从5.4到至少当前的8.0,通常是检查session_status()
。如果不是PHP_SESSION_ACTIVE
,那么会话尚未启动(PHP_SESSION_NONE
),或者根本无法使用会话(PHP_SESSION_DISABLED
)。
isset($_SESSION['var'])
即可。 - animuson