将php会话设置为持续1个月(或直到用户明确注销)

时间:2011-10-29 07:28:45

标签: session authentication cookies php

我有一个关于php会话的快速问题。如果我希望会话持续一个月(或直到用户明确注销),我将分别更改以下php.ini设置:session.gc_maxlifetime = 2592000和session.cookie_lifetime = 2592000,默认值分别为1440和0。正确的吗?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

但是,有些人在服务器配置方面有更多经验,可能会知道还有其他的超时时间,例如Apache和TCP设置,无论你创建它多高,都可能超过这个值。

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

可以使用旋转身份验证Cookie实现Remember Me功能,该Cookie根据用户的登录凭据设置为已知系列中的下一个令牌。

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

答案 1 :(得分:0)

如果您要求的是“记住我”,最简单的解决方案是:

用户成功登录后,您可以创建一个随机哈希并将其存储在cookie(用户浏览器)和数据库(加入用户ID)中

因此,当用户首先调用您的脚本时,检查哈希值,如果数据库中存在哈希,您自动登录而不询问用户名/密码,否则您将询问用户/密码

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

使用这种方法你也可以设置一个时间限制,在cookie中只设置cookie持续时间,在数据库端添加时间限制,如果用户登录使用时间限制的哈希值,则不允许使用身份验证登录:)

希望这能解决你的问题

相关问题