【问题标题】:PHP Session expires automatically at exact 120 SecondsPHP 会话在 120 秒后自动过期
【发布时间】:2016-10-31 18:05:32
【问题描述】:

我正在使用包含在每个页面中的单个配置文件来控制用户会话。我的网站中有登录/注销选项。

我想将用户的会话销毁超时时间延长至 1 年(即使用户关闭了浏览器,会话应该仍然存在,除非用户退出页面)。

我正在使用它来扩展用户会话超时值,

<?php

session_set_cookie_params(31556952);

ini_set('session.gc_maxlifetime',31556952);

session_start();

//my Other code like DB connections will come below.

?> 

PHP.ini

我已将session.gc_maxlifetime 设置为31556952

但这不会影响任何事情,用户会话会在 120 秒时被销毁。

我已经参考了所有与 stackoverflow 相关的问题,但我没有得到任何线索。

会有什么问题?任何建议。

【问题讨论】:

标签: php session session-cookies session-state


【解决方案1】:

我可以想到一些事情,但它可能是由很多事情造成的。您已验证 ini 文件以确保一切正常。我之前遇到过这样的问题,原来我在服务器上安装了 2 个版本的 PHP。我正在修改错误的ini文件。确保您使用的 php 版本属于您正在使用的 ini 版本。

有时在 php 文件中执行 ini 集对我不起作用。一直不明白为什么。发生这种情况时,将记录添加到 htaccess 文件以确保 apache 正在拾取它们。 session timeout in php code and in htaccess?

最后的东西有点难找。尝试 100% 确保您没有在某处破坏会话。事实上,这是一个艰难的 120 秒,它看起来像是服务器,但请确保您在 120 秒后没有使用 ajax 调用某些脚本,并且由于某种原因,该脚本正在终止会话。

【讨论】:

  • 我明白,但我没有每 120 秒调用任何脚本来销毁会话。
  • 不是故意的,但它可能是一个错误。对于默认会话时间,120 似乎非常短。您是否尝试过自己制作一个单独的 php 脚本并检查该脚本使用该会话存活多长时间?如果它在 120 秒后也死了,你知道应该归咎于服务器而不是应用程序
  • 嗯,ini_get('session.gc_maxlifetime') 这给出了我在 php.in 服务器中设置的确切值 31556952
  • 可能在应用程序的某处设置了另一个 ini,它覆盖了您在脚本中设置的值,这给您带来了麻烦。如果你在linux服务器上运行,尝试使用grep命令在应用目录中查找ini集
【解决方案2】:

有几件事可能会让你感到困惑

  1. 如果某个地方的另一个脚本具有不同的session.gc_maxlifetime 值,并且两个脚本共享相同的会话数据保存空间,则以较低的值为准。如果这是您的情况,您应该将会话保存在自定义位置,这样任何设置较低生命周期的脚本都不会再与此脚本冲突。您可以通过调用ini_set('session.savepath',NEWPATH) 来做到这一点。详情请see the docs
  2. 在某些 Debian 系统上,在运行时设置 session.gc_maxlifetime 无效。你最好的办法是在你的php.ini 文件中改变它。这是reported here

考虑到您希望会话持续数月,我可能会依赖数据库来存储登录 cookie。

【讨论】:

  • 谢谢,NEWPATH 可以吗?它会影响现有的用户会话吗?
  • 它应该是 PHP 具有读/写权限的目录的路径。如果您在运行时使用ini_set 设置它,我相信它只会影响该会话。如果您在始终运行的配置文件中执行此操作,它将影响使用该配置文件的所有会话。请参阅文档:php.net/manual/en/function.session-save-path.php
  • 好的,我将更改我的会话存储路径并返回。
  • 是的,用于更改存储会话的路径的代码有效,但它没有解决我的问题。
  • 很抱歉听到这个消息。可能有一些超出 PHP 控制的东西正在垃圾收集这些会话。如果相同的代码在另一台机器上没有相同的效果,这种情况更有可能发生。如果您无法解决,请考虑我回答的最后一段。
【解决方案3】:

我认为您需要设置会话时间以及具有相同持续时间的 set-cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多