【问题标题】:PHP session is getting expired for every 1 hour automatically even if session expiry is set implicitly即使会话过期是隐式设置的,PHP 会话也会每 1 小时自动过期
【发布时间】:2014-05-27 05:34:52
【问题描述】:

我将会话设置为在登录后 4 小时内有效。但会话将在整整时间(@12 PM、1 AM、2 AM 等等......)到期。

例如:如果在 12.00 PM 或 12.30PM 登录,会话将在下午 1 点到期。

这是我的代码。

// server should keep session data for AT LEAST 4 hour
ini_set('session.gc_maxlifetime', 14400);
session_start();
$_SESSION['login'] = 1;
$login_session_id=session_id();

【问题讨论】:

  • @AjayPatel:我知道......我是说即使我设置了会话时间它也不起作用......
  • 这个问题和Cakephp有关吗?
  • 如果这实际上与 CakePHP 相关(看起来不像!):阅读最后一部分 here 关于 cookie 生命周期。你很可能错过了那部分。并且不要直接使用ini_set()等。

标签: php session cakephp


【解决方案1】:

您在共享服务器上吗?

如果是这样,您需要将会话目录设置为默认 /tmp/ 以外的其他目录。

发生的情况是,如果服务器上的任何其他应用程序的会话时间少于一小时,则无论您的应用程序的会话时间设置如何,它都会在一小时内过期您的会话数据到。

这让我费了好大劲才弄明白,但是一旦你了解了 PHP 的会话垃圾收集是如何工作的,它就很有意义了。

如果您实际使用的是 CakePHP,那么您只需将会话处理程序设置为使用“cake”而不是“php”,这会将会话存储在 app/tmp/session 而不是 /tmp。

【讨论】:

  • 是的,我使用的是共享服务器。请问您也可以告诉我如何更改会话默认文件夹吗?提前致谢
  • php.net/manual/en/function.session-save-path.php 请记住让您的新会话文件夹可被网络用户写入。
  • 我已将会话保存到我的特定文件夹中。即使在那之后会话在 1 小时后过期。我将其设置为ini_set(session.save_path, "/home/web/session"); ini_set('session.gc_maxlifetime', 14400);
【解决方案2】:
<?php
echo " Nfo5o " ;
set_cookie (expire, 84600);
?>

【讨论】:

  • 您能否稍微解释一下这段代码以描述它为什么起作用?
猜你喜欢
  • 2014-07-31
  • 2017-09-17
  • 2016-05-22
  • 1970-01-01
  • 2018-07-29
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
相关资源
最近更新 更多