PHP会话意外过期

PHP会话意外过期,php,session,Php,Session,我在这里不知所措。楼上有一组特定的用户,他们的会话似乎完全随机过期。这不仅仅是当他们离开网站一段时间,它可能会在他们浏览时过期。对我和大多数用户来说,一切都很好。这不是浏览器的问题,我们在FF和所有IE版本中都有正常工作的人,在FF和IE中都没有正常工作的人 我的gc_maxlife是43200,垃圾回收率非常低1/1000(这并不重要)。是否有可能服务器上运行的其他东西正在随机删除我们的某些会话?我应该检查什么?这仍然不能解释为什么只有这一特定群体受到影响 我有一些与默认设置不同的会话设置:

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

我的
gc_maxlife
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发送过cookies,所以我没有理由关闭“只用cookies”。我不能保证在我来到这里之前制作这个应用程序的那些不合群的人没有利用
bug\u compat\u 42
来设置会话变量,但我还是希望这方面的问题不那么随机

编辑:


在进一步的调查中,我发现会话根本没有被破坏,但最终用户正在获得一个新的会话ID。旧会话仍然完整地存在于服务器上,但在他们浏览时会随机启动一个新会话。

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

我的第一个想法是,有一些东西随机清除了您的临时文件目录。如果您使用的是标准的LAMP设置,PHP将把会话数据文件存储到/tmp中。如果通过清理过程将其删除,您将丢失会话

编辑:我现在在想这个。如果只有一组特定的用户受到影响,那么这种情况就不太可能发生

cookie设置如何?我会确保这些人没有使用动态代理之类的东西,并且您的cookie是为您站点的根域设置的。他们是否有可能将某些隐私清理软件(如CCleaner)设置为一项计划任务,以删除他们的cookie


我会站在他们的一台电脑上,把Firebug扔到一台Firefox机器上,检查HTTP请求,看看cookies是否被正确发送。

我会在这些机器上安装一些HTTP嗅探器,比如(付费但物有所值)或(免费),看看会话cookies的情况如何(我想是PHPSESSID,但不确定)如果cookie在会话的中间被删除或更改,因为代理,奇怪的Apache配置或某些东西,这将是最好的检测方法。

< P>这里的问题是,他们的浏览器正在设置会话cookie过早到期。你永远不必使用,永远不。我并不为此感到骄傲,但如果这件事对任何事情都有所启发,请随时让我进去:

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

我知道这已经晚了。但只是对一些有同样问题的人来说

[如果您对数据进行加密和解密]

我处理过这个问题,花了一段时间才弄清楚问题出在哪里。 它不断为同一用户创建新会话ID。 结果表明加密数据和解密数据是不同的。 解密数据返回时带有一些额外的空格。
当从数据库或您正在使用的任何存储发送和返回时,请尝试检查您的数据值。

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

首先,我想知道这个库的用途是什么,我们也可以从php.ini访问这些设置

密钥\一个新创建的密钥,该密钥的用途是什么

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

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

正如我所说,我已经考虑过这个选项,但我不认为这会产生我所得到的行为。如果有什么东西清理了会话,我希望每个人都同时注销。相反,我只有一小部分人随机注销。关于设置的其他信息有什么帮助吗?你可以d验证您的所有会话设置。在上有一个列表。发生了两件事之一:服务器上的会话文件正在删除,或者会话cookie正在过期。我将尝试隔离发生其中一件事的情况,然后从中着手。我已确定删除的不是会话。如何检查cookie是否已被删除你知道哪些浏览器受到了这个问题的影响吗?我们看到一些用户只使用ie10。非常相似的代码是php站点上会话设置cookie参数最流行的注释。看起来你必须做一些事情才能使事情正常工作。我和你有同样的问题,但是在付费hostin上g、 我不知道什么会导致过早过期,所以我用了和你类似的方法。谢谢。