【问题标题】:PHP Session ClarificationPHP 会话说明
【发布时间】:2016-10-30 10:13:28
【问题描述】:

好吧,经过几天的挫折,我偶然发现了会话问题,不幸的是,我不确定我找到的解决方案是否会成为安全问题或风险。

我在我的本地主机上处理一个 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 分钟时,它不再需要我重新登录。但这是一个正确的解决方案吗?

【问题讨论】:

    标签: php session


    【解决方案1】:

    您应该知道 session.cache_expire 与 PHP 会话的生命周期无关。它与 HTTP 缓存有关。您的 Web 服务器前面是否有缓存内容的代理?这就是该设置所控制的。

    就 PHP 会话生命周期而言,这里是您的关键设置:

    session.gc_maxlifetime - 会话被标记为“垃圾”之前的秒数。这是由服务器

    强制执行的

    session.cookie_lifetime - 会话 cookie 过期前的秒数。这是由客户端(网络浏览器)

    强制执行的

    您必须确保两者都互相恭维。如果服务器端在客户端之前过期,客户端将呈现会话 cookie,服务器将拒绝它。如果客户端cookie在服务器端之前过期,浏览器根本不会发送会话cookie,服务器会发送一个新的cookie,认为它是一个新客户端。

    至于垃圾收集本身,它也不会影响会话的生命周期,因为这只对被服务器标记为“垃圾”的会话起作用。有两个关键设置:

    session.gc_probability

    session.gc_divisor

    将这些视为分数的最简单方法。例如:

    session.gc_probability = 1

    session.gc_divisor = 100

    客户端请求触发垃圾收集器的几率是 100 分之一。因此,每 100 个客户端中就有 1 个会出现小幅性能下降(不是真的 - 它非常快)。它可能在您的生产服务器上设置为 1000,因为它正在处理大量流量。也就是说,如果您在一分钟内收到 1000 个请求,您可能只希望大约每分钟调用一次垃圾收集器。

    【讨论】:

    • @sgif 我登录应用程序,我可以在该页面上坐 3 分钟,然后尝试转到需要您登录的页面。然后它要求我再次登录。除非我使用上面的以下代码..
    • session.cache_expire 可能与会话的生命周期没有任何关系,但它要求我在 3 分钟后登录需要登录的页面。
    • 也许您无意中发现了另一个问题,即您实际上正在查看页面的缓存版本,而实际上根本没有会话。我会检查并确保您没有查看缓存页面。通过在 3 分钟间隔内更改内容并重新加载页面进行测试。如果内容没有更新,您将知道您正在查看的是缓存而不是真实页面。
    猜你喜欢
    • 2012-09-05
    • 2012-04-06
    • 2015-06-12
    • 1970-01-01
    • 2013-12-10
    • 2011-09-07
    • 2015-12-01
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多