PHP 垃圾收集器不断删除我的 session

标签 php session cakephp cakephp-3.5

问题:

我有一个使用 PHP session 允许用户登录的网站。它工作正常。但是 session 过期太快,1 分钟的不活动将使用户注销。

我的环境:

PHP 版本:7.1

服务器:NGINX

框架:CakePHP 3.5

到目前为止我做了什么?

我在 StackOverflow 或我得到的任何搜索结果上做了每一个解决方案。我在 php.ini 和 CakePHP 配置中都延长了我的 session 超时时间。

解决方案

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

现在我现在的问题是,我不希望我的session.gc_probability 配置为零,因为它不会收集任何垃圾(对此不太确定. 如果此信息有误,请指正。)。这将导致 session 保留数月或数年,这对服务器来说是真正的垃圾。

我想到了从 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 ? session.gc_probability 为 1,session.gc_divisor 为 1000。我认为 1/1000 概率的进程不应该每隔 1 或 2 分钟启动一次。

最佳答案

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

The built-in configurations are:

  • php - Saves sessions with the standard settings in your php.ini file.
  • cake - Saves sessions as files inside tmp/sessions. This is a good option when on hosts that don’t allow you to write outside your own home dir.

[…]

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

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


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

关于PHP 垃圾收集器不断删除我的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50529277/

相关文章:

php - ORDER BY MySQL语句

php - 是否可以从独立的rest api请求(到php服务器)收集mysql查询并运行组合插入或更新?

php - Laravel session 闪存消息和按钮

html - Express 和 ejs 中的 Flash 消息不显示

php - 使用 php 将命令行发送到 Linux 服务器

php - 从 Cassandra-PHP 中的键类型 TimeUUID 获取值

session - 如何在 clojure 网络应用程序中创建用户帐户?

php - 严格标准的 PHP 错误蛋糕

cakephp - 通过 CakePDF 使用 TCPDF 作为引擎

cakephp - 如何在eclipse IDE中集成cakephp?