会话Cookie不仅在IE11中设置

时间:2018-02-25 17:18:47

标签: php session cookies internet-explorer-11

好奇的问题。

新开发的网站,使用第三方登录系统,使用会话(惊喜!)。网站适用于所有实例,所有浏览器 Internet Explorer 11(以及可能以前的版本,未经检查)。

限定符:

  • 我已经阅读了有关SO的各种相关主题,没有什么符合要求。
  • PHP Header不会在每个受影响的网页上进行重定向
  • 域名或网址中没有_
  • 没有iframe。
  • 会话和域名受到保护。

代码明细:

a)每个页面都有一个控制器文件,其中包含标题信息:

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。这是通过 登录/访问控制和公共站点区域完成的。

if($_COOKIE['cookieEnabled'] !== "yes") {
    \setcookie('cookieEnabled', "yes", time() + 42000, "/", $_SERVER['HTTP_HOST'], true, true);
}

它只是一个表示“是”的cookie,如果cookie尚未设置,则启用cookie。简单。

c)在此之下;有控制器代码加载会话变量,并为第三方管理员做其他事情。

// 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");
    }

请注意,会话数组永远不会为空,因为它是在之前的页面上预先填充的;

e) [local] 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
  

注意:网络路径为:/home/domainaccount/public_html/

已使用phpinfo()检查PHP.ini值并正确设置。

好奇的问题

我在各种浏览器中加载网站,它登录得很好,所有工作,会话数据都被携带。

然而,在IE11上却没有。它只是返回一个空白屏幕,没有错误,没有反馈(也就是会话数据传回登录页面),没有基于代码的错误日志

错误日志显示:

  

信息:尝试了没有会话或cookie的访问尝试......

很多次但没有迹象表明 cookie 被拒绝,只是会话。

不出所料,登录页面为成功和登录尝试失败提供了header位置重定向。

关于IE11

  • IE版本号:11.248.16299.0。

  • IE Cookie设置:接受第一方Cookie,接受第三方Cookie,始终允许会话Cookie。

问题

1)为什么这只发生在IE上?

2)我该如何解决这个问题(更改我的标题,cookie设置等?)

1 个答案:

答案 0 :(得分:3)

如果服务器时间与客户端时间相比过去,则某些版本的IE会静默删除cookie。正确设置服务器/客户端时间可能会有帮助。

  

这太可怕了-服务器将比客户端浏览器更精确地计时。您可以完全参考吗?

我在GitHub上的其他人的描述中偶然发现了它,并解决了我的问题。

请注意,由于您没有在域中明确标注下划线,因此您是否知道根据RFC,IE中的前导数字也是无效的URL?