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

sam*_*rry 0 php safari favicon firefox session-variables

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;
    }
?>
Run Code Online (Sandbox Code Playgroud)

我可能认为这是 Firefox 的一个错误,但最近我也被 iOS 12 和 MacOS Mojave 上最新版本的 Safari 注销了,通常是在浏览几个页面后。

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

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

但是,如果 PHP 代码和会话变量存在问题,因为这是在服务器端处理的,那么它可能无法在任何浏览器上运行,并且以前也无法运行?

感谢您的任何建议。


我设法解决了这个问题,请参阅下面的答案。

sam*_*rry 5

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

为了澄清这一点,请在 Mac 和 Windows 上的 Firefox 版本 63.0、MacOS Mojave 上的 Safari 版本 12.0 以及 iOS 12.0.1 上的 Safari 上发布。其他测试的浏览器(Chrome 和 Opera)都很好。

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

然后我发现了 Mozilla 论坛参考图标上旧帖子的以下页面:

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

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

因此解决方法只是将 favicon.ico 放在网站的根目录中。

谢谢您的意见。