4

当您在某个限制后(例如 30 分钟左右)使会话过期时,我在 Internet 上找到了很多教程,但是我想在没有活动的情况下使会话过期,引用著名的 SO 问题,解决方案很简单:

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']每次请求都更新非常忙碌。

有没有其他方法可以做到这一点?所有文件中唯一的共同点是一个用于数据库连接的配置文件。

4

1 回答 1

6

您也可以$_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 文件。

于 2013-10-07T00:01:24.210 回答