失去了与Internet Explorer和Lighttpd web服务器的PHP会话


Lost PHP sessions with Internet Explorer and Lighttpd webserver

我在使用IE11和Edge (Windows 10)连接到Lighttpd web服务器时遇到了问题。

考虑以下代码:

if (PHP_SESSION_NONE === session_status()) {
    session_start();
}
$x = isset($_SESSION['bob'])? $_SESSION['bob']  : 'nothing';
echo 'The Session has started, bob is set to ' . $x .'<br/>';
$_SESSION['bob'] = 'hope';
echo 'The Session ID is ' . session_id() .'<br/>';

当我浏览到test.php -包含上述代码-使用Chrome,关闭Chrome,重新打开Chrome,然后浏览回到这个页面,它显示:

The Session has started, bob is set to hope
The Session ID is 6d2jbpmrrlrqt96h2nd19ua160

IE11和Edge将显示:

会话已经开始,bob设置为无会话ID为35k87vgdt7t41q4lkphq815hq1

为什么IE11和Edge会丢弃会话?

**这个问题也发生在WAMP Apache上,所以尽管我已经看到Lighttpd是一个潜在的原因(Internet Explorer, jQuery, session lost php,),我不相信。

**此外,Fiddler显示了一个新的会话ID与每个IE'Edge连接。

任何想法吗?

使用session_set_cookie_params为会话添加cookie生存期,例如:

    if (PHP_SESSION_NONE === session_status()) {
    session_set_cookie_params(60*60*24*7);
    session_start();
}

解决了浏览器关闭和重新打开后会话仍然存在的问题。

php文档http://php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime声明:

会话。Cookie_lifetime指定发送到浏览器的cookie的生存期(以秒为单位)。值0表示"直到浏览器关闭"。默认值为

http://php.net/manual/en/function.session-set-cookie-params.php

这就提出了为什么它在Chrome (45.0.2454.101 m)中工作的问题?但那是另一个问题…

脚注:尽管会话cookie的最大生存期值看起来是2,147,483,647,但"session"的最大值是:Gc_maxlifetime"似乎是65535;

将生存期设置为更大的值会阻止会话工作。