PHP会话变量在Firefox 63.0、MacOS Mojave上的Safari 12.0和iOS 12.0.1上丢失
Mac和Windows上的最新Firefox版本63.0,不知何故打破了我为电子商务网站的管理后台构建的登录。这以前运作良好。我使用PHP 使用有效凭据成功登录后,PHP会话变量在Firefox 63.0、MacOS Mojave上的Safari 12.0和iOS 12.0.1上丢失,php,firefox,safari,session-variables,favicon,Php,Firefox,Safari,Session Variables,Favicon,Mac和Windows上的最新Firefox版本63.0,不知何故打破了我为电子商务网站的管理后台构建的登录。这以前运作良好。我使用PHP 使用有效凭据成功登录后,$\u会话['admin\u logged\u in']变量设置为TRUE,我已正确登录并重定向到起始页。然而,当我尝试导航到管理站点中的任何其他页面时,我会立即注销,就像会话变量突然丢失一样 在最开始的每个页面上,包括起始页面,我都有一个包含短登录检查脚本的include,如下所示: <?php //start session
$\u会话['admin\u logged\u in']
变量设置为TRUE
,我已正确登录并重定向到起始页。然而,当我尝试导航到管理站点中的任何其他页面时,我会立即注销,就像会话变量突然丢失一样
在最开始的每个页面上,包括起始页面,我都有一个包含短登录检查脚本的include,如下所示:
<?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的一个bug,但最近我也被iOS 12和MacOS Mojave上最新版本的Safari注销了,通常是在浏览了几页之后
目前正在工作,在Opera或Chrome上没有问题(在Mac上测试)
我尝试过清除Firefox中的缓存并调整隐私设置,但没有成功。我与我的web主机进行了交谈,他们没有意识到任何服务器端问题或更改
但若PHP代码和会话变量有问题,因为这是在服务器端处理的,那个么它可能不会在任何浏览器上工作,以前也不会工作
谢谢你的建议
我设法解决了这个问题,请看下面我的答案。它可能与阻止登录系统中使用的某些JavaScript或其他资源的新安全策略有关 检查Firefox web控制台 您可能会收到如下消息:
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).
请参阅它可能与阻止登录系统中使用的某些JavaScript或其他资源的新安全策略相关联 检查Firefox web控制台 您可能会收到如下消息:
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).
看我自己设法解决了这个问题 为了澄清这一问题,Mac和Windows上的Firefox版本63.0、MacOS Mojave上的Safari版本12.0和iOS 12.0.1上的Safari都出现了问题。其他被测试的浏览器,Chrome和Opera,都很好 我对一组基本页面进行了一些测试,发现在Firefox中,在设置任何PHP会话变量之后的所有页面上,它都不可用/不存在。Safari通常在浏览了几页之后就会丢失它 然后,我在Mozilla论坛参考favicons上发现了一篇旧帖子的下一页: 我检查了开发人员工具,发现这些浏览器,每次在Firefox中,每几页在Safari中,都在请求favicon.ico并得到404响应,因为我在那里没有响应。出于某种原因,这会破坏PHP会话变量。我不清楚为什么 因此,修复方法只是在网站的根目录中放置一个favicon.ico
谢谢你的评论。我自己设法解决了这个问题 为了澄清这一问题,Mac和Windows上的Firefox版本63.0、MacOS Mojave上的Safari版本12.0和iOS 12.0.1上的Safari都出现了问题。其他被测试的浏览器,Chrome和Opera,都很好 我对一组基本页面进行了一些测试,发现在Firefox中,在设置任何PHP会话变量之后的所有页面上,它都不可用/不存在。Safari通常在浏览了几页之后就会丢失它 然后,我在Mozilla论坛参考favicons上发现了一篇旧帖子的下一页: 我检查了开发人员工具,发现这些浏览器,每次在Firefox中,每几页在Safari中,都在请求favicon.ico并得到404响应,因为我在那里没有响应。出于某种原因,这会破坏PHP会话变量。我不清楚为什么 因此,修复方法只是在网站的根目录中放置一个favicon.ico
感谢您的评论。您是否在另一台独立安装Firefox的计算机上尝试过此功能?您是否尝试过一组非常简单的测试页面,而没有其他代码?如前所述,这似乎不太可能。您的浏览器不关心PHP会话;除非您将会话数据存储在cookie中,并且已锁定浏览器上的cookie行为,否则它完全不知道这些行为。您是否在另一台独立安装了Firefox的计算机上尝试过此操作?您是否尝试过一组非常简单的测试页面,而没有其他代码?如前所述,这似乎不太可能。您的浏览器不关心PHP会话;除非您将会话数据存储在cookie中,并且您已经锁定了浏览器上的cookie行为,否则它完全不知道这些问题。我也在努力解决同样的问题。我收到了一个CSP错误,阻止了favicon的下载,但它都在同一个域上,并且都是https,所以我不知道为什么会发生这种情况。我正在为同样的问题而挣扎。我收到一个CSP错误,阻止了favicon的下载,但它都在同一个域上,并且都是https,所以我不知道为什么会发生这种情况。