检测PHP会话是否存在

Pab*_*blo 37 php session

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

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

Rei*_*.85 53

我使用组合版本:

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


Seb*_*oli 34

根据PHP.net手册:

如果$_SESSION(或者$HTTP_SESSION_VARS对于PHP 4.0.6或更低版本)使用,则用于isset()检查已注册的变量$_SESSION.


Tot*_*oto 18

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

if (session_status() == PHP_SESSION_ACTIVE) {
  echo 'Session is active';
}
Run Code Online (Sandbox Code Playgroud)
  • PHP_SESSION_DISABLED 如果会话被禁用.
  • PHP_SESSION_NONE 如果启用了会话,但都不存在.
  • PHP_SESSION_ACTIVE 如果会话已启用,则存在一个会话.

  • @micaball `==` 运算符的意思是“等值”。`===` 运算符的意思是“具有相同的值和类型”。我们只在这个比较中寻找真/假值,所以 `==` 是更好的选择。 (2认同)
  • @micaball (Too) 许多 php 函数可以返回值类型的混合(经典的是 `strpos()`)。在这种情况下,检查值类型将有效地有意义。`session_status()` 总是返回一个 `int`,所以没有必要。:) (2认同)