如何判断PHP会话是否已超时

时间:2011-08-08 13:15:08

标签: php session session-variables

目前我一直在$ _SESSION上测试变量,如果isset()返回false,则假设会话超时显示登录页面。

session_start();

if (isset($_POST['login'])):
  // Process login credentials
  $_SESSION['account'] = Array('user'=>'username');
endif;

if (! isset($_SESSION['account'])):
  // User not logged in, show login page
else:
  // User is logged in, show account page
endif;

但是,用户最近报告该帐户页面为空白。我假设没有可用的会话数据,因为上面的代码在某种程度上是有缺陷的。有人能指出我正确的方向来正确测试会话是否已在PHP中超时吗?

1 个答案:

答案 0 :(得分:1)

如果可以使用:

if (! isset($_SESSION['account']) && !empty($_SESSION['account'])):
  // User not logged in, show login page
else:
  // User is logged in, show account page
endif;

所以这不会通过2个条件,

  1. 如果未设置会话

  2. 如果设置了会话,但是空白了!

  3. 仍然存在无效值的情况,例如,用户名来到xyz并且您没有任何匹配xyz的记录,那么它可能是一个没有记录的情况,因此它可能是也是空白!

    不仅仅是这些陈述,您应该进一步检查$_POST中的数据是否与系统中的任何记录匹配,并且只有在确认匹配后,您应该将其设置为$_SESSION

    这些应该涵盖你的大多数情况,使逃跑更少!