【问题标题】:How to tell if a PHP session has timed out如何判断 PHP 会话是否已超时
【发布时间】:2011-10-22 09:36:28
【问题描述】:

目前我一直在 $_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 中超时?

【问题讨论】:

  • 可能是空白$_SESSION['account'] 变量的情况吗?或者它可能不包含预期值?
  • 啊,是的,你可能是对的!你提示我搜索代码的其余部分,我发现了$_SESSION['account'] = Array();(虽然它应该稍后填充帐户信息,也许这没有发生)。那么上述代码的其余部分是否相当健壮?
  • 如果是这种情况,您还可以在 if 语句中添加另一种情况。 if(!isset($_SESSION['account']) || empty($_SESSION['account'])) 这将检查 $_SESSION['account'] 变量是否也不包含空数组。

标签: php session session-variables


【解决方案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. 如果会话已设置,但为空白!

仍然存在无效值的情况,例如用户名来到xyz,而您没有任何匹配xyz的记录,则可能是未获取记录的情况,因此也可能为空白!

所以除了这些语句之外,您应该进一步检查$_POST中的数据是否与系统中的任何记录匹配,并且只有在确认匹配后,您应该将其设置为@987654325 @。

这些应该涵盖你的大部分情况,减少逃跑!

【讨论】:

    猜你喜欢
    • 2021-08-09
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多