PHP会话意外到期

时间:2009-05-27 15:52:38

标签: php session

我在这里不知所措。我在楼上有一组特定的用户,他们的会话似乎完全随机到期。这不仅仅是当他们离开网站一段时间,它可以在他们浏览时过期。对我和我们的大多数用户来说一切正常。这不是一个浏览器问题,我们有人在FF和所有IE版本都正常运行,FF和IE中的人不起作用。

我的gc_maxlifetime位于43200,垃圾收集是一个疯狂的低1/1000(不是那个应该重要)。服务器上是否有其他东西可以随机删除我们的某些会话?我该怎么检查?这仍然无法解释为什么只有这个特定群体似乎受到影响。

我有一些与默认设置不同的会话设置:

session.gc_maxlifetime = 43200
session.gc_divisor = 1000
session.save_path = /var/lib/php/session
session.use_only_cookies = Off
session.bug_compat_42 = Off

前三个我并不担心,但最后两个可能导致这种行为吗?我实际上并没有通过URL发送cookie,所以我没有充分的理由关闭use_only_cookies。我不能保证在我到达这里之前制作这个应用程序的不合适并没有利用bug_compat_42来设置会话变量,但是我再次预计这个问题不会随意。

编辑:

在进一步调查中,我发现Session根本没有被销毁,但最终用户正在获得一个新的会话ID。旧会话在服务器上仍然完好无损,但在浏览时会随机启动一个新会话。

5 个答案:

答案 0 :(得分:5)

这里的问题原因是他们的浏览器将会话cookie设置为过早到期。我已经解决了这个肮脏,肮脏的黑客的问题,你永远不应该使用它。我并不为此感到骄傲,但如果这对任何事情都有所启发,请随意让我进去:

if (!headers_sent()) {
    if ($_COOKIE["PHPSESSID"] != "") {
        setcookie("PHPSESSID", $_COOKIE["PHPSESSID"], time()+43200, "/", ".mydomain.com");
    }
}

答案 1 :(得分:1)

您能否提供有关您的设置的更多信息?

我的第一个想法是随机清理你的临时文件目录。如果您正在使用标准LAMP设置,PHP将会话数据文件存储到/ tmp中。如果他们被清理过程从那里删除,你将失去你的会话。

编辑:我现在正在考虑这个问题。如果只有特定的一组用户受到影响,那么这种可能性就会降低。

Cookie设置如何?我确保这些人没有使用类似动态代理的东西,并且您的cookie是针对您网站的根域设置的。是否有可能将某些隐私清理软件(例如CCleaner)设置为可能会删除其Cookie的计划任务?

我会在他们的一台计算机上到达那里并将Firebug扔到其中一台Firefox机器上并检查HTTP请求以查看cookie是否正确发送。

答案 2 :(得分:1)

我会在这些机器上安装一些像http {3}}(付费但值得每一分钱)或httpwatch(免费)的http嗅探器,看看会话cookie发生了什么(我认为它是PHPSESSID,但是不确定)。如果由于代理,奇怪的apache配置等原因在会话中间删除或更改cookie,这将是检测它的最佳方法。

答案 3 :(得分:1)

我知道这已经很晚了。但是对于那些也遇到同样问题的人来说。

[如果您加密和解密数据]

我遇到了这个问题并花了一些时间来弄清楚问题是什么。 它不断为同一用户创建新的会话ID。 原来,加密数据和解密数据不一样。 解密数据返回一些额外的空格。 在发送和从数据库或您正在使用的存储器返回时,请尝试检查数据值。

答案 4 :(得分:0)

在我的项目中,一个库用于保护会话,有时我发现我的会话突然被破坏了。

https://github.com/ezimuel/PHP-Secure-Session/blob/master/SecureSession.php

首先我想知道这个库的目的是什么,我们也可以从php.ini来设置这些设置。

KEY _...一个新创建的KEY的用途是什么。

当我在open()中使用print_r时,我得到以下示例结果

Hqx_SecureSession Object
(
    [_debug:Hqx_SecureSession:private] => 
    [_key:protected] => 5ò™6žÝ°rIÐß'k Êii07ÀtCzªt@ü¸"‡ÄCžA¼ÿ£g{IP
    [_path:protected] => c:\hqp\xampp_1.7.4\tmp\
    [_name:protected] => PHPSESSID
    [_ivSize:protected] => 16
    [_keyName:protected] => KEY_PHPSESSID
    [_cookieParams:protected] => Array
        (
            [lifetime] => 7200
            [path] => /
            [domain] => dev.autoquotes.insurance.com
            [secure] => 
            [httponly] => 1
        )

    [_sessionId:protected] => 
    [_logger:Hqx_SecureSession:private] => 
)
htq827r4rjh9ob05nhlqb8vmd5ai52djb0bd0l42vk9un26df541c:\hqp\xampp_1.7.4\tmp