如何处理会话销毁在Zend框架


How to handle session destroy in Zend Framework?

我需要知道用户登录和注销,问题是当用户会话超时时,我该如何处理这个更新应用程序。

在会话销毁时,我想更新一个db表,例如?

我不喜欢使用cron作业,因为它会在服务器上加载很多东西。

一般来说,没有办法在不造成很大性能损失的情况下保持所有用户会话状态的并发信息。正如您已经说过的,这是由于在一次超时时无法正确终止会话造成的。

此时您有两个选择:

1。运行cron作业(deterministic)

您可以根据需要设置一个cron作业。这将确保您拥有的信息最多与cron间隔一样老。

2。设置会话GC概率

设置session.gc_probabilitysession.gc_divisor PHP选项允许您指定在每个请求上启动会话清理的概率。通常,这是一个相对较低的值(例如1/100),因为在非常高的服务器负载下,它可以很快地降低您的性能。

这种方法的好处是它是内置的,如果您的服务器实际上没有被用户访问,它不会花费您任何费用。

主要的缺点是,概率必须总是调整考虑到请求/秒的数量在您的服务器上,这不是一个常数。其他缺点是它依赖于实际工作的请求(如果没有人访问您的服务器,则永远不会清理会话),并且它是全局设置(在服务器范围内工作,而不是在应用程序范围内)。