我有一个关于php会话的快速问题。如果我希望会话持续一个月(或直到用户明确注销),我将分别更改以下php.ini设置:session.gc_maxlifetime = 2592000和session.cookie_lifetime = 2592000,默认值分别为1440和0。正确的吗?
感谢。
答案 0 :(得分:1)
session.cookie_lifetime
为0将保留cookie直到浏览器重新启动(基本上是整个会话)。
将session.gc_maxlifetime
设置为如此高的值意味着您的服务器上会有很多陈旧的会话,如果您有大量会话,这可能是一个问题 - 通常会话存储在系统的/ tmp文件夹中。当这个文件夹(通常在* nix机器上)填满它可能会导致机器出现问题 - 进程开始锁定,因为无论出于何种原因它们都无法创建临时文件。 (您可以将session.save_path
更改为/ tmp以外的其他内容,以免出现此问题 - 尤其是在共享主机上。)
我相信你基本上要求的是一个Remember Me
功能,允许某人登录而不必记住他们的用户名/密码,并记住确切的状态(1个月的会话)。
可以使用旋转身份验证Cookie实现Remember Me
功能,该Cookie根据用户的登录凭据设置为已知系列中的下一个令牌。
1个月的会话功能可以通过将会话状态存储在持久缓存(文件缓存,数据库,像Toyko Tyrant这样更精细的东西)中来实现。
答案 1 :(得分:0)
如果您要求的是“记住我”,最简单的解决方案是:
用户成功登录后,您可以创建一个随机哈希并将其存储在cookie(用户浏览器)和数据库(加入用户ID)中
因此,当用户首先调用您的脚本时,检查哈希值,如果数据库中存在哈希,您自动登录而不询问用户名/密码,否则您将询问用户/密码
在第一个选项中,您“绕过”登录,因为哈希标识用户。 如果用户从您的站点明确注销,只需删除会话并重置用户哈希(在数据库端)...
使用这种方法你也可以设置一个时间限制,在cookie中只设置cookie持续时间,在数据库端添加时间限制,如果用户登录使用时间限制的哈希值,则不允许使用身份验证登录:)
希望这能解决你的问题