纤细的PHP框架会话长度使更长


Slim PHP Framework Session Length Make Longer

我试图弄清楚如何在SLIM PHP框架中使会话持续更长时间。 我知道加密的 cookie 和 cookie 会话功能,但我不能使用它,因为我存储在会话中的数据大于 cookie 可以容纳的存储量。

有没有办法让会议持续更长时间?

到目前为止,我已经尝试了以下代码,但没有运气。 会话似乎持续了大约几个小时,然后我必须重新登录。

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
    ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7);
    session_cache_limiter(false);
    session_start();

PHP 的会话对服务器的配置高度敏感。 有许多可能的地方可能会出错:

服务器配置

服务器可以配置为防止您通过 ini_set 设置这些特定的配置变量。 如果您没有为警告打开错误报告,您甚至可能不知道这些行正在失败。 可以使用phpinfo查看脚本执行期间使用的实际值。

Debian/Ubuntu

一些操作系统,如Debian和Ubuntu有自己的垃圾收集器,定期清理PHP会话:https://serverfault.com/questions/511609/why-does-debian-clean-php-sessions-with-a-cron-job-instead-of-using-phps-built。

他们不关心你的gc_maxlifetime设置;他们只是按照固定的时间表运行。

共享主机

请记住,PHP 会话只是作为文件存储在服务器上。 在(配置不佳的)共享服务器中,默认情况下,所有服务器帐户通常将其会话写入同一目录。 换句话说,没有设置任何设置来区分哪些会话属于哪个服务器帐户。

此外,gc_maxlifetime 的值不会以任何方式与单个会话相关联 - 它是每次调用脚本时重新设置的全局值。 再加上 PHP 在调用会话垃圾收集器时调用会话垃圾收集器的事实session_start,其他帐户的脚本可能会根据调用时使用的任何gc_maxlifetime值删除您的会话。

解决此问题的唯一方法是将会话放在单独的目录中。 即便如此,您也需要确保在调用您自己的脚本之一时设置gc_maxlifetime。 一般来说,如果可能的话,这是一个很好的理由,不要使用 PHP 的本机会话。 像Laravel的会话模块这样的软件包可以轻松部署替代会话存储机制,如memcache或数据库。