将php会话设置为持续1个月(或者直到用户显式退出)


Setting php sessions to last 1 month (or until user explicitely logs out)

我有一个关于php会话的快速问题。如果我想要一个会话持续一个月(或者直到用户显式退出),我更改以下php.ini设置:Gc_maxlifetime = 2592000和session。Cookie_lifetime = 2592000,默认值分别为1440和0。正确吗?

谢谢。

session.cookie_lifetime(0)将保留cookie直到浏览器重新启动(基本上是整个会话)。

将您的session.gc_maxlifetime设置为如此高的值将意味着您的服务器上将有许多过时的会话,如果您有大量会话,这可能是一个问题—通常会话存储在系统的/tmp文件夹中。当这个文件夹(通常在*nix机器上)被填满时,可能会导致机器出现问题——进程由于某种原因无法创建临时文件而开始锁定。(您可以将session.save_path更改为/tmp以外的其他内容,这样您就不会有这个问题-特别是在共享主机上)。

但是,在服务器配置方面有更多经验的人可能知道有其他超时,如Apache和TCP设置,无论您将其设置多高,都可能超过此值。

我相信你基本上要求的是一个Remember Me功能,允许某人登录而不必记住他们的用户名/密码并记住确切的状态(1个月的会话)。

Remember Me特性可以通过一个旋转的身份验证cookie来实现,该cookie根据用户的登录凭据设置为已知系列中的下一个令牌。

1个月的会话功能可以通过将会话状态存储在持久缓存(文件缓存,数据库,更复杂的东西,如Toyko Tyrant)中来实现。

如果你要求的是" Remember Me ",最简单的解决方案是:

一旦用户成功登录,您将创建一个随机散列并将其存储在cookie(在用户浏览器上)和数据库中(与userid连接)

所以当用户调用你的脚本首先你检查哈希值,如果哈希值存在于数据库中你自动登录而不需要问用户名/密码,否则你会问用户/密码

在第一个选项中,你"绕过"登录,因为哈希可以识别用户。如果用户明确地从您的站点注销,只需删除会话并重置用户哈希(在数据库端)…

使用这种方法,你也可以设置一个时间限制,在cookie中简单地设置cookie的持续时间,在数据库端添加时间限制,如果用户登录使用哈希超过时间限制,你不允许授权登录:)

希望这能解决你的问题