【问题标题】:PHP session should not expire until user logs out在用户注销之前,PHP 会话不应过期
【发布时间】:2014-04-08 10:20:54
【问题描述】:

在我的网站上,有时用户甚至没有点击“退出”按钮就突然退出。为什么会这样?我已经检查了我的默认设置,

session.gc_divisor      1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  0   0

一切似乎都很好,因为垃圾收集器仅以 session.gc_probability 除以 session.gc_divisor 的概率启动。并且使用该选项的默认值(分别为 0 和 1000),机会为 0%。那么为什么用户会被注销呢?请告诉我如何实现用户在单击“注销”按钮之前不应注销的功能,即 session_start() 在用户单击“注销”按钮之前不应进行垃圾收集?

如果我在每个脚本中都包含以下代码,它会起作用吗?

<?php

   ini_set('session.gc_maxlifetime', 30*60);
   session_start();

?>

【问题讨论】:

  • 用户是否在 24 分钟前退出?您是使用自己的会话处理程序(例如数据库)还是默认的?
  • 是的,有时用户会在 24 分钟前退出。我正在使用默认会话处理程序。

标签: php


【解决方案1】:

您使用共享主机吗?在将会话文件存储在默认共享目录中之前,我在共享主机上遇到了同样的问题,该目录被随机清除并删除了会话文件。我通过将会话文件移动到另一个目录来解决它。

尝试使用session_save_path("path/to/another/folder") 将会话保存到您可以控制的另一个位置,看看是否有帮助。

【讨论】:

  • 感谢您的回复。我正在检查这个。我已将我的 php.ini 更改为此,它会工作吗? session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 28800 这样垃圾收集器只会在8小时后运行。即使用户在网站上处于非活动状态,它也不应该使会话过期,但如果用户关闭浏览器窗口或注销,会话也会过期。
  • @user3484291 希望是这样。正如我在回答中所说,这是共享主机提供商的解决方法,默认情况下将会话文件存储在 tmp 目录中,然后相当积极地清除它。我还使用了一些 ini_set() 调用来更改会话参数。我实际上没有对 php.ini 进行任何更改,因为我无权访问它。
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 2018-03-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 2019-10-11
相关资源
最近更新 更多