当 PHP 中没有活动时使会话过期


expire session when there is no activity in PHP

我在互联网上找到了很多教程,当你在某个限制后过期一个会话时,比如在 30 分钟左右之后,但我想在没有活动时使会话过期,引用一个著名的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']很忙。

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

您也可以每分钟只更新一次$_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 文件。

更正了语法。

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    
    }
}