当前位置: 首页> 最新文章列表> 如何设置 PHP session 的生命周期和过期时间?

如何设置 PHP session 的生命周期和过期时间?

M66 2025-06-06

在 PHP 中,Session 是实现用户身份识别、数据保持等功能的常用机制。默认情况下,Session 的生命周期和过期时间由服务器的配置文件(如 php.ini)控制,但我们也可以通过 session_start() 之前的相关设置来自定义 Session 生命周期。

本文将详细讲解如何通过 session_start() 设置 Session 的生命周期和过期时间,以及相关注意事项。

一、理解 Session 生命周期与过期时间

Session 生命周期由两个部分组成:

  1. 客户端 Cookie 的过期时间:浏览器关闭后是否还保留 Session ID。

  2. 服务端 Session 数据的保存时间:即服务器上存储 Session 数据的生存周期。

这两者都需要正确设置才能实现你期望的 Session 生命周期。

二、设置 Session 生命周期的关键函数

在调用 session_start() 之前,你可以使用以下两个函数设置 Session 生命周期:

  • session_set_cookie_params():设置客户端 Cookie 的过期时间。

  • ini_set('session.gc_maxlifetime', 秒数):设置服务端 Session 数据的最大存活时间。

三、示例代码

以下是一个设置 Session 生命周期为 1 小时(3600 秒)的示例:

<code> <?php // 设置服务器端 Session 生命周期为 1 小时 ini_set('session.gc_maxlifetime', 3600);

// 设置客户端 Cookie 生命周期为 1 小时
session_set_cookie_params([
'lifetime' => 3600,
'path' => '/',
'domain' => 'm66.net',
'secure' => true, // 仅在 HTTPS 下发送 Cookie(根据需要启用)
'httponly' => true, // 禁止 JS 访问 Cookie,提高安全性
'samesite' => 'Lax' // 防止 CSRF 攻击,可选值: Lax、Strict、None
]);

// 启动 Session
session_start();

// 设置一个 Session 变量
$_SESSION['user_id'] = 1234;
?>
</code>

说明:

  • session.gc_maxlifetime:控制服务器保留 Session 数据的时间。默认值通常是 1440 秒(24 分钟)。

  • session_set_cookie_params()lifetime 参数决定了客户端 Cookie 的过期时间。如果为 0,则表示“浏览器关闭即失效”。

四、Session 的垃圾回收机制

即使设置了 gc_maxlifetime,PHP 的垃圾回收机制也不是每次请求都会清除过期 Session。其清除的概率由以下配置项决定:

session.gc_probability = 1
session.gc_divisor = 100

表示有 1% 的概率执行 Session 清理。可根据需要调整。

五、结合实际项目使用建议

  • 如果你运行的是多个子域(如 api.m66.netadmin.m66.net),建议将 domain 设置为 .m66.net 以实现跨子域共享 Session。

  • 使用 HTTPS 时,务必设置 securehttponly 参数,以提升 Session 安全性。

  • 定期清理过期 Session 文件,避免堆积占用服务器空间。

六、结语

通过合理配置 session_set_cookie_paramssession.gc_maxlifetime,我们可以灵活控制 PHP Session 的生命周期,更安全、更高效地管理用户状态。在调用 session_start() 前进行这些设置,是实现定制化 Session 行为的关键步骤。