【发布时间】:2015-10-12 20:52:52
【问题描述】:
我在使用 IE11 和 Edge (Windows 10) 连接到 Lighttpd 网络服务器时遇到问题。
考虑这段代码:
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 会为每个 IE\Edge 连接显示一个新的会话 ID。
有什么想法吗?
【问题讨论】:
-
session_start() 是否在每一页的顶部?我个人喜欢将它与我的 SQL 资料放在一起,因为我的所有 SQL 页面都可能还需要会话数据。
-
为了测试,只有一页顶部带有 session_start 的页面。在实际代码中,它包含在大多数其他 php 脚本所需的共享文件中。
标签: php internet-explorer session microsoft-edge lighttpd