我在使用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与每个IEEdge连接。
任何想法吗?
使用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声明:
http://php.net/manual/en/function.session-set-cookie-params.php会话。Cookie_lifetime指定发送到浏览器的cookie的生存期(以秒为单位)。值0表示"直到浏览器关闭"。默认值为
这就提出了为什么它在Chrome (45.0.2454.101 m)中工作的问题?但那是另一个问题…
脚注:尽管会话cookie的最大生存期值看起来是2,147,483,647,但"session"的最大值是:Gc_maxlifetime"似乎是65535;