PHP垃圾收集器继续删除我的会话

时间:2018-05-25 12:29:44

标签: php session cakephp cakephp-3.5

问题:

我有一个使用PHP会话的网站允许用户登录。它工作正常。但会议过早到期,1分钟不活动将注销用户。

我的环境:

Php版本:7.1

服务器:NGINX

框架:CakePHP 3.5

到目前为止我做了什么?

我在StackOverflow或我获得的任何搜索结果上做了每一个解决方案。我在php.ini和CakePHP配置中扩展了会话超时。

解决方案

经过2到3天的研究,我找到了解决方案。在我的php.ini中,我找到了一个名为session.gc_probability的配置,并为此设置了值0。现在我的会话永远不会过期,除非用户有意退出。

现在我目前的问题是,我不希望我的session.gc_probability配置为零,因为它不会收集任何垃圾(不太确定。请更正我,如果这个信息是错误的。)这将导致会话保持一个月或几年,这是服务器真正的垃圾邮件。

我想到了here

session.gc_probability零值
session.gc_divisor coupled with session.gc_probability defines the 
probability that the gc (garbage collection) process is started on 
every session initialization. The probability is calculated by using 
gc_probability/gc_divisor, e.g. 1/100 means there is a 1% chance that 
the GC process starts on each request. session.gc_divisor defaults to 
100.

我的配置出了什么问题?是什么导致垃圾收集很快删除我的会话? session.gc_probability为1,session.gc_divisor为1000.我认为1/1000概率的过程不应每1或2分钟开始。

1 个答案:

答案 0 :(得分:1)

根据您的后续评论,Session.handler的设置为phpSessions文档说明了:

  

内置配置为:

     
      
  • php - 使用php.ini文件中的标准设置保存会话。
  •   
  • cake - 将会话保存为tmp/sessions内的文件。当这些主机不允许您在您的外部写字时,这是一个不错的选择   拥有自己的家园主任。
  •   
     

[...]

session.save_path的默认php.ini设置取决于您的PHP发行版(并且无论如何都可以更改),但它通常涉及所有不选择退出的PHP应用程序的共享数据存储。这意味着具有最短session.gc_maxlifetime的应用可能会从其他应用中删除会话数据。

切换到cake应该解决这个问题。

关于session.gc_probabilitysession.gc_divisor的一些跟进。过于积极地设置它们会导致频繁的垃圾收集。这可能会损害性能,但不会导致过早的数据过期。另一方面,过于宽松的值仍然允许访问过时的数据。