好吧,在经历了几天的挫折之后,我无意中发现了一些问题,但不幸的是,我不确定我找到的解决方案是否会成为一个安全问题或风险。
我在本地主机上做一个php项目,我可以离开5,10,甚至15分钟,然后回来,我仍然可以继续我的应用程序登录。当我上传我的项目进行在线测试时。如果我登录,我可以刷新2-3分钟,并将不得不重新登录。
我试了所有的东西,从大约50个帖子在这里,但没有结果。因此,我决定阅读本地主机和主机上的每一行phpinfo来进行比较。什么都没有..。其实我看过了一个细节..。
今天早上喝咖啡的时候只剩下一点头发..。我发现了问题。
session.cache_expire 180
现在,不管会话生存期如何,这将在3分钟内结束。也在本地主机上,
session.gc_divisor 1000
session.gc_divisor在本地主机上是1000,而在我的网络主机上是100,
现在我有了一个名为sessions.php的文件,其中包含了我的session_start。我找到的解决办法就在这里。http://php.net/manual/en/function.session-cache-expire.php
因此,我已经将会话文件更改为以下内容。
session_cache_limiter('private');
$cache_limiter = session_cache_limiter();
session_cache_expire(30);
$cache_expire = session_cache_expire();
session_start();
ob_start();其结果是,当我的浏览器打开超过3分钟,它就不再需要我重新登录。但这是一个正确的解决办法吗?
发布于 2016-10-30 11:06:17
您应该知道,session.cache_expire与PHP会话的生存期无关。这与HTTP缓存有关。在您的web服务器前面是否有缓存内容的代理?这就是设置控制的方法。
就PHP会话生存期而言,以下是您的关键设置:
session.gc_maxlifetime -会话前的秒数被标记为“垃圾”。这是由服务器强制执行的。
session.cookie_lifetime -会话cookie过期前的秒数。这是由客户端 (web浏览器)强制执行的。
你得确保两个人都在恭维对方。如果服务器端在客户端之前过期,则客户端将呈现会话cookie,而服务器将拒绝它。如果客户端cookie在服务器端到期,浏览器将根本不发送会话cookie,服务器将发送一个新的cookie,认为它是一个新客户端。
至于垃圾收集本身,它也不会影响会话生存期,因为这只对服务器标记为“垃圾”的会话起作用。有两个关键设置:
session.gc_probability
session.gc_divisor
考虑这些问题的最简单的方法是将其分解为一个分数。例如:
session.gc_probability = 1
session.gc_divisor = 100
客户端请求触发垃圾收集器的几率为1/ 100。因此,每100个客户中就有一个会出现轻微的性能下降(并不是真的--它非常快)。在您的生产服务器上,它可能设置为1000,因为它处理了大量的流量。也就是说,如果您马上收到1000个请求,您可能只希望每分钟调用一次垃圾收集器。
https://stackoverflow.com/questions/40327979
复制相似问题