0
ini_set('session.cookie_lifetime', 259200);
ini_set('session.gc_maxlifetime', 259200);
session_start();

我的网站上的每个页面都包含上述代码。我想让用户在登录后保持登录状态三天,但如果他们在到期日之前访问该网站,它会让他们再存活三天。基本上,会话在他们离开站点后的三天内保持活动状态(如果他们在这三天内没有返回)。

但是,我注意到,尽管ini_set我有上述情况,但会话会保持活跃大约一天,然后就死了。我认为这可能是我的虚拟主机的 php.ini,但它也在我的本地计算机上执行此操作。

我可以做一些其他ini_set的电话来获得我想要的效果吗?这些似乎不起作用,尽管它们确实让它存活了一天。

4

1 回答 1

1

随着会话的大小变大,您会遇到各种怪癖:不确定当前版本,但 PHP 5.1.x 在 session_start() 处将整个会话加载到内存中;使用 20 MB 会话和 50 个并发用户,您的脚本开始受到磁盘访问速度的严重限制(又名“脚本启动速度慢得像糖蜜” - 仅会话就占用了 GB 的 RAM,您肯定不希望您的服务器开始换出);最后,我们专门使用了一个盒子来在其 RAM 中保留尽可能多的会话,并且前端盒子通过 NFS 访问它们(尽管它在我们的案例中有所帮助,但这对你来说可能是多余的)。

请注意,对于许多并发用户和磁盘上的会话存储,会话临时文件的数量可能会导致文件系统限制(例如,一个目录中可以有多少文件)或其他限制(我们曾经发现一个盒子很难配置为仅允许同时打开 4096 个文件)。这些都不是真正特定于会话的,但可以通过会话处理来触发。

于 2013-10-08T02:48:12.737 回答