需要将会话保持在特定时间,然后终止它在网络开发中很常见。 PHP 提供了设置会话超时的选项,但它们可能并不总是产生可靠的结果。让我们了解现有 PHP 机制的缺点,并探索可靠的解决方案。
PHP 提供了两种设置会话的选项timeouts:
建立可靠的会话超时机制会话超时,实施您自己的解决方案。这可以通过维护代表上次用户活动的时间戳来实现。
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { // Last request was more than 30 minutes ago session_unset(); // Unset $_SESSION variable session_destroy(); // Destroy session data in storage } $_SESSION['LAST_ACTIVITY'] = time(); // Update last activity timestamp
因为每次请求更新会话数据都会修改会话文件的修改日期,垃圾收集器不会过早删除会话。
为了增加安全性,请考虑定期重新生成会话 ID 以缓解会话劫持尝试:
if (!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] = time(); } else if (time() - $_SESSION['CREATED'] > 1800) { // Session started more than 30 minutes ago session_regenerate_id(true); // Change session ID and invalidate old one $_SESSION['CREATED'] = time(); // Update creation time }
以上是如何可靠地管理 PHP 会话 30 分钟后过期?的详细内容。更多信息请关注PHP中文网其他相关文章!