PHP Firefox 63.0、MacOS Mojave 上的 Safari 12.0 和 MacOS 上的 Safari 丢失了会话变量 iOS

PHP session variables lost in Firefox 63.0, Safari 12.0 on MacOS Mojave and Safari on iOS 12.0.1

Mac 和 Windows 上的最新版 Firefox 63.0 以某种方式破坏了我为电子商务网站的管理后端构建的登录。这以前工作正常。我用 PHP.

使用有效凭据成功登录后,$_SESSION['admin_logged_in'] 变量设置为 TRUE,我已正确登录并重定向到起始页面。然而,当我随后尝试导航到管理站点内的任何其他页面时,我立即注销,就好像会话变量突然丢失了一样。

在每个页面的最开始,包括起始页面,我都有一个包含简短的登录检查脚本,如下所示:

<?php
//start session
session_start() ;
//check user is logged in
if (($_SESSION['admin_logged_in'] !== TRUE) || (!isset($_SESSION['admin_logged_in']))) {
    header("location: /index.php") ;
    $_SESSION['admin_reason'] = "illegal" ;
    exit;
    }
?>

我可能认为这是 Firefox 的一个错误,但最近我也被注销了,通常是在浏览了几页之后,通过 iOS 12 和 [=39= 上的最新版本的 Safari ]OS莫哈韦沙漠。

目前在 Opera 或 Chrome(在 Mac 上测试)没有问题。

我尝试过清除 Firefox 中的缓存并调整隐私设置,但没有成功。我已经与我的网络托管商谈过,他们不知道任何服务器端问题或更改。

但是如果 PHP 代码和会话变量有问题,因为这是在服务器端处理的,大概它不会在任何浏览器上工作并且以前也不会工作?

感谢任何建议。


我设法解决了这个问题,请看下面我的回答。

它可能与阻止某些 JavaScript 或您的登录系统中使用的其他资源的新安全策略有关。

检查 Firefox 网络控制台 https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Opening_the_Web_Console

您可能收到如下消息:

Content Security Policy: Ignoring “'unsafe-inline'” within script-src: ‘strict-dynamic’ specified
Content Security Policy: Ignoring “https:” within script-src: ‘strict-dynamic’ specified
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://XXX. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

我自己设法解决了这个问题。

澄清一下,Mac 和 Windows 上的 Firefox 版本 63.0、MacOS 上的 Safari 版本 12.0 和 iOS 上的 Safari 问题12.0.1。其他经过测试的浏览器 Chrome 和 Opera 均正常。

我对一组基本页面进行了一些测试,发现在 Firefox 中,在设置任何 PHP 会话变量之后的所有页面上,它并不是 available/did 不存在。 Safari 通常会在浏览几页后丢失它。

然后我在 Mozilla 论坛参考 favicons 上发现了旧 post 的以下页面:

https://bugzilla.mozilla.org/show_bug.cgi?id=263057

我检查了开发人员工具,发现这些浏览器每次在 Firefox 的情况下,以及在 Safari 的情况下每隔几页,都在请求 favicon.ico 并收到 404 响应,因为我没有一个在那里。出于某种原因,这破坏了 PHP 会话变量。我不清楚为什么。

所以修复只是在网站的根目录中放置一个 favicon.ico。

感谢您的评论。