【发布时间】:2011-10-19 01:52:35
【问题描述】:
我正在尝试将 quiz/survey plugin 与现有的 Wordpress 网站集成。一切正常,除了如果用户让测验/调查闲置一段时间(30 分钟足以触发它),他们在尝试提交回复时会收到以下错误消息:
PHP 会话错误。检查您的会话设置。
我按照错误消息的提示做了,并检查了我的 PHP 会话设置。更具体地说,我编辑了服务器的php.ini 文件并将会话超时设置为两个小时。我以为这样可以解决问题,但是当我再次测试时,我在 30 分钟不活动后遇到了同样的问题。
所以我的问题是:
- Wordpress 维护的会话是否与 PHP 维护的会话不同?如果是,它是如何配置的?
-
php.ini是配置我的会话设置的正确位置吗? - 以前有没有人看到过这个错误,如果有,解决方法是什么?
【问题讨论】:
-
是的,通常 php.ini 是更改会话设置的正确位置(当然您可以在运行时更改大部分设置)。但是您到底更改了什么设置(有两个主要设置:cookie 生命周期和垃圾收集器,如果您使用 cookie 处理会话)?您是否查看过浏览器中的会话 cookie 何时过期?当用户不在第一步时,您看到的错误只会发生,但在 Wpsqt 的 Shortcode.php 中没有可用的 cookie 变量。
-
@XzKto - 我只更改了 cookie 生命周期设置。但是在浏览器中检查我的 PHPSESSION cookie 列出了“在会话结束时”的到期,这不是应该的。我是否需要做任何特别的事情来获取 php.ini 中的更改。
-
首先你也需要改变 session.gc_maxlifetime (默认为 24 分钟)或者不管你的 cookie 存在多久 PHP 都会自动删除 session 文件(不是 cookie,有数据的真实文件)在那个间隔之后。更改 session.cookie_lifetime 时,您必须记住它设置的 cookie 过期时间是相对于服务器时间的,而不是客户端的时间。你到底改变了什么 php.ini?如果你将 PHP 作为 Apache 模块安装,那么 Apache 将使用另一个 php.ini。如果你真的改变了设置或查看确切的 php,只需检查 phpinfo()。 ini 路径。
-
@XzKto - 谢谢,设置
gc_maxlifetime option似乎已经修复了它。奇怪的是,我的 PHPSESSION cookie 仍然被列为过期的“会话结束”,但调查现在可以正常工作。 -
你检查你的 phpinfo() 输出了吗?如果它在那里设置正确,那么可能是 Wordpress 自己设置它(有很多方法可以做到)。我自己从来没有使用过 Wordpress,所以在这里我真的帮不了你。还有一件事:提防大 gc_maxlifetime 值 - 攻击者可以很容易地利用它进行 Dos 攻击 - 使用缓慢的垃圾收集器,您将拥有大量垃圾会话文件,这可能会降低您的服务器速度,甚至会弄乱某些文件系统。