好奇的问题。

新开发的网站,使用使用 session 的第三方登录系统(惊奇!)。网站可以在所有实例上,所有浏览器上完美运行,除了 Internet Explorer 11(以及未经检查的可能是以前的版本)。

资格赛:

  • 我已经阅读了有关SO的各种相关主题,但这些都不适合。
  • PHP Header不会在每个受影响的页面上进行重定向
  • 域名或URL中没有_
  • 没有iframe。
  • session 和域 protected 。

  • 代码详细信息:

    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
  • IE版本号:11.248.16299.0。
  • IE cookie设置:接受第一方cookie,接受第三方cookie,始终允许 session cookie。

  • 问题

    1)为什么仅在IE中会发生这种情况?

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

    最佳答案

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



    我曾经在GitHub上的其他人的描述中碰到过它,它解决了我的问题。

    附带说明一下,由于您没有在域中明确调用任何下划线,因此您是否知道根据RFC,IE中的前导数字也是无效的URL,而IE也存在问题吗?

    10-01 04:22