好奇的问题。
新开发的网站,使用使用 session 的第三方登录系统(惊奇!)。网站可以在所有实例上,所有浏览器上完美运行,除了 Internet Explorer 11(以及未经检查的可能是以前的版本)。
资格赛:
Header
不会在每个受影响的页面上进行重定向_
。 代码详细信息:
a)每个页面都有一个 Controller 文件,其中包含标题信息:
header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Expires: Thu, 19 Nov 2011 08:52:00 GMT"); // Date in the past
header('Content-Type: text/html; charset=utf-8');
header("X-Clacks-Overhead: GNU Terry Pratchett");
header_remove("X-Powered-By");
header("X-XSS-Protection: 1; mode=block");
header("X-Frame-Options: SAMEORIGIN");
header("X-Content-Type-Options: nosniff");
header("Content-Language: en");
header("Content-Security-Policy: upgrade-insecure-requests;");
header("Referrer-Policy: origin-when-cross-origin"); //referrer for Chrome
header("Referrer-Policy: strict-origin-when-cross-origin");
if (isset($_SERVER['HTTP_USER_AGENT']) &&
(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)){
header('X-UA-Compatible: IE=edge,chrome=1');
}
b)作为此过程的一部分;进行cookie检查以了解是否在客户端浏览器上启用了cookie。这是在登录/访问控制和公共(public)站点区域中的中完成的。
if($_COOKIE['cookieEnabled'] !== "yes") {
\setcookie('cookieEnabled', "yes", time() + 42000, "/", $_SERVER['HTTP_HOST'], true, true);
}
全部是一个说"is"的cookie,如果尚未设置cookie,则启用cookie。简单的。
c)在此以下;有 Controller 代码可以加载 session 变量并为第三方管理方面做其他工作。
// Create / Include the Session Object - Session.php
$session = new Session($db);
d)我已经在
Session.php
__construct
中设置了一个测试语句来执行此操作: session_start();
if($_COOKIE['cookieEnabled'] !== "yes" && empty($_SESSION)) {
error_log("INFO: An access attempt without a session or cookie was attempted...");
if($_COOKIE['cookieEnabled'] !== "yes"){
error_log("Cookie does not appear to be enabled");
}
die("unimportant debug error");
}
请注意, session 数组永远不会为空,因为它在先前的页面中已预先填充。
e)因此,[本地] PHP.ini是:
session.cookie_secure=1
default.charset=utf-8
error_log=/home/domainaccount/error/PHP_error.log
session.save_path=/home/domainaccount/sessionz
session.cookie_domain=domain.org.uk
PHP.ini值已使用
phpinfo()
检查并正确设置。好奇的问题
我将网站加载到各种浏览器中,并且登录正常,所有工作和 session 数据均已携带。
但是在IE11上却没有。它只是返回一个空白屏幕,没有错误,没有反馈(又将 session 数据传递回登录页面),并且没有基于代码的错误日志。
错误日志显示:
很多次,但没有迹象表明cookie被拒绝,只是 session 。
毫不奇怪,登录页面具有
header
位置重定向功能,可用于成功和失败的登录尝试。关于IE11
问题
1)为什么仅在IE中会发生这种情况?
2)我该如何解决(更改标题,cookie设置等?)
最佳答案
如果服务器时间与客户端时间相比过去,则某些版本的IE会静默删除cookie。正确设置服务器/客户端时间可能会有所帮助。
我曾经在GitHub上的其他人的描述中碰到过它,它解决了我的问题。
附带说明一下,由于您没有在域中明确调用任何下划线,因此您是否知道根据RFC,IE中的前导数字也是无效的URL,而IE也存在问题吗?