【问题标题】:Setting php sessions to last 1 month (or until user explicitely logs out)将 php 会话设置为持续 1 个月(或直到用户明确注销)
【发布时间】:2011-12-17 18:20:40
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: session authentication cookies php


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我正在努力完成 tumblr 的工作。登录后,无论您是否关闭浏览器等,您似乎都已无限期登录,直到您实际注销为止。如果您在 2 周后回来,您实际上并没有再次“登录”,您实际上会留下来长时间处于登录状态。他们只是使用复杂的文件系统设置来一次处理这么多可能过时的会话吗?
    • 在问题开始出现之前,我大约有多少陈旧的会话?
    【解决方案2】:

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

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

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

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

    使用此方法您还可以设置时间限制,在 cookie 中只需设置 cookie 持续时间,在 db 端添加时间限制,如果用户使用超过时间限制的哈希登录,则不允许身份验证登录 :)

    希望这能解决您的问题

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 2016-07-13
      • 2016-07-14
      • 1970-01-01
      • 2013-10-18
      • 2013-09-05
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      相关资源
      最近更新 更多