- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题:
我有一个使用 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
的设置是 php
。 Sessions文档说明:
The built-in configurations are:
php
- Saves sessions with the standard settings in your php.ini file.cake
- Saves sessions as files insidetmp/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_probability
和 session.gc_divisor
的一些跟进。将它们设置得太激进会导致频繁的垃圾收集。这可能会损害性能,但不会导致数据过早过期。另一方面,过于宽松的值仍将允许访问过时的数据。
关于PHP 垃圾收集器不断删除我的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50529277/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!