【问题标题】:expire session when there is no activity in PHP当 PHP 中没有活动时过期会话
【发布时间】:2013-10-13 11:07:18
【问题描述】:

我在互联网上找到了很多教程,当你在某个限制后过期会话时,比如在 30 分钟左右之后,但是我想在没有活动的情况下使会话过期, 引用一个著名的 SO 问题the solution 是直截了当的:

if (isset($_SESSION['LAST_ACTIVITY']) 
    && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
        // last request was more than 30 minutes ago
        session_unset();     // unset $_SESSION variable for the run-time 
        session_destroy();   // destroy session data in storage
    }
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

但是我必须在每个请求上更新$_SESSION['LAST_ACTIVITY'] 吗?

预先假设的答案是肯定的,但我有一个包含 200 多个 php 页面的大网站,而且每次请求都更新 $_SESSION['LAST_ACTIVITY'] 很忙。

还有其他方法吗?所有文件中唯一的共同点是一个用于数据库连接的配置文件。

【问题讨论】:

  • 搜索每次出现的session_start() 并在其后添加代码。更好:将您的代码 sn-p 推送到一个函数或更好的类中,并且只调用该类。

标签: php session cookies session-variables session-cookies


【解决方案1】:

您也可以每分钟仅更新一次$_SESSION['LAST_ACTIVITY'](例如),但会话不会在恰好 30 分钟后被销毁。

if (isset($_SESSION["LAST_ACTIVITY"])) {
    if (time() - $_SESSION["LAST_ACTIVITY"] > 1800)) {
        // last request was more than 30 minutes ago
        session_unset();     // unset $_SESSION variable for the run-time 
        session_destroy();   // destroy session data in storage
    } else if (time() - $_SESSION["LAST_ACTIVITY"] > 60) {
        $_SESSION["LAST_ACTIVITY"] = time(); // update last activity time stamp
    }
}

最简单的方法是将代码放在配置文件中,因为我认为您不想更改所有 200 个 php 文件。

【讨论】:

  • 如果你启用了session_write_close()(需要支持并发ajax请求),这将不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2011-08-23
  • 2019-12-21
  • 2011-11-07
  • 2014-07-31
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多