rg8*_*g88 5 php session internet-explorer
登录到我正在处理本地计算机上预期功能的站点但在远程服务器上失败但仅在Internet Explorer中失败.踢球者是它在本地IE中工作,而不是在远程机器上.
世界上有什么可能导致这种情况?我已经逐步完成了远程计算机上的代码,可以看到在数据库中检查输入的登录值,找到它们然后调用登录函数.这将设置两个$ _SESSION变量并重定向到主管理页面.但是,仅在IE中(而不是在本地计算机上运行时...这是关键)当到达主管理页面时,$ _SESSION变量不存在.var_dump($_SESSION)当我在我的本地环境中以及除了IE 6,7和8之外的每个浏览器中运行时,在远程服务器上运行时,我得到了我对每个浏览器的期望(我得到一个空值,好像没有为$ _SESSION设置任何内容) ).
这真让我难过,所以任何建议都值得赞赏.
例如......在IE中,在本地运行,var_dump给了我:
array
'Username' => string 'theusername' length=11
'UserID' => string 'somevalue' length=9
Run Code Online (Sandbox Code Playgroud)
在远程服务器上运行(仅限IE ...在其他浏览器中正常工作)var_dump给了我:
array(0){}
Run Code Online (Sandbox Code Playgroud)
代码(一个最小的例子......虽然这个问题不需要代码示例):
$User = GetUser($Username, $Password);
if ($User->UserID <> "") { // this works so we call Login()...
Login($User); // this also works and gives expected results. on to redirect...
header("Location: index.php"); // a var_dump at index.php shows that there is no session data at all in IE, remotely.
} else {
header("Location: login.php");
}
function Login($data) {
$_SESSION['Username'] = $data->Username;
$_SESSION['UserID'] = $data->UserID;
// a var dump here gives the expected data in every browser
}
Run Code Online (Sandbox Code Playgroud)
编辑:解决了这个问题.事实上,测试服务器上的域名中有一个下划线.不知道为什么,现在没有时间谷歌,但是名为some_client.ourcompany.com的下划线就是问题所在.一定要喜欢Internet Explorer ......它就像一个你无法避免的被动攻击性同事.
将其作为答案(由用户 tuzo 建议)放入以便更容易找到。解决了这个问题。事实是测试服务器上的域名中有一个下划线。不知道为什么,现在也没有时间去 Google 搜索,但下划线(名为 some_client.ourcompany.com 之类的名称)就是问题所在。一定要喜欢 Internet Explorer...它就像一个你根本无法避免的消极好斗的同事。
摘自另一个 SO 答案...准确解释了发生的情况:其中一个子域是否使用下划线?IE 在接受来自不遵循 URI RFC 的子域的 cookie 时遇到问题。(http://www.ietf.org/rfc/rfc2396.txt)