我在互联网上找到了很多教程,当你在某个限制后过期一个会话时,比如在 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
}
}