Facebook现在为用户提供订阅,以便您可以获得有关更改的实时更新。如果我的应用收到更新,我打算将其存储在数据库中。我还想检测他们的会话是否存在。如果确实如此,那么我也可以在那里更新数据。
我的会话ID是MD5(fb_id + secret),所以我可以轻松编辑他们的会话。问题是如何检测会话是否存在。
答案 0 :(得分:50)
我使用合并版本:
if(session_id() == '' || !isset($_SESSION)) {
// session isn't started
session_start();
}
答案 1 :(得分:34)
如果使用
$_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
)。