【问题标题】:PHP Session variables still there after session timeout会话超时后 PHP 会话变量仍然存在
【发布时间】:2014-07-04 08:07:14
【问题描述】:

我正在制作一个 web 应用程序并使用会话来保持登录的用户数据。我设置了 2 个变量 $_SESSION["loged_in"] 和 $_SESSION["user_id"] 来了解用户是否已连接。但是当会话超时时,变量仍然存在,这会扭曲我的逻辑。我该如何解决?

【问题讨论】:

  • check this out 可能会有所启发。
  • 你需要展示两个以上的变量,我认为任何真正的“逻辑”都会自行解决:)
  • 您需要将超时值存储在会话中。如果您在选择的值之后没有清除会话,session.gc_maxlifetime 最终会为您清除。

标签: php session timeout session-variables


【解决方案1】:

您确定会话已超时吗?

根据您的问题,如果会话仍然存在,我认为会话尚未达到超时。会话有一个生命周期。会话生命周期你可以在一个名为 php.ini 的文件中看到

在该文件中,您可以在 var session.gc_maxlifetime 的值中找到会话生命周期的长短。 您可以按照以下链接中的步骤设置/更改会话生命周期 How to change the session timeout in PHP?

====== 更新 ======

根据您的评论,您可能还没有创建代码来注销 用户是否在他们也处于非活动状态时尝试加载页面 长

您必须在您拥有的每个 .php 文件中“创建代码以检查会话时间并创建代码以注销”。

if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) { 
    header('Location: http://yoursite.com/logout.php');
} 
else{ 
    $_SESSION['last_activity'] = time(); //this was the moment of last activity.
}

【讨论】:

  • 请详细说明您的答案并提供参考以供 OP 理解
  • 我确定,因为我使用了 session_cache_expire(1)session_cache_limiter("public"),因此会话将在一分钟后过期。但是即使你是对的并且会话没有超时,为什么在一段时间不活动之后会话变量不包含它应该包含的内容?例如,我使用 '$_SESSION["user_id"]' 来显示用户相关数据,但它向我显示了一些错误,或者某些东西没有出现,但我很惊讶没有被重定向到登录页面,因为它应该是,只有当我注销时,会话才明显被破坏,并且注销链接只需调用session_destroy()
  • @Xsmael 可能是您没有创建代码来注销用户,如果他们在太长时间不活动时尝试加载页面。我已经编辑了我的答案
  • 当然,我没想到如果用户在超时时间之前处于非活动状态。会话将被自动销毁。会话应该是这样工作的吗?我错了吗?
  • @Xsmael 你是对的.. 但是你当然必须在你拥有的每个 .php 文件中“创建代码来检查会话时间并创建代码来注销”。
猜你喜欢
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 2015-04-02
  • 2011-12-27
  • 2014-03-18
  • 2011-09-29
相关资源
最近更新 更多