首页 > 解决方案 > 当来自第 3 方 IFRAME 时,Chrome 不保留我的 _SESSION 变量,但在直接访问时完美运行

问题描述

直到几周后,我所有的网站都运行良好

我编写代码并在 CodeCanyon 上出售。

但最近(今天)我注意到我无法再登录到我在那里出售的我的小 PHP 代码片段。

如果我直接在我的域上工作,例如在 URL 栏中键入链接,那么在任何浏览器 ( meaning, all my _SESSION vars are kept, all throughout) 中一切都会完美运行。

但是当我检查我的代码片段时(all using password-protection and _SESSIONS var,在CodeCanyon 的网站上,我似乎无法在 Google Chrome 中登录它们,因为 _SESSIONS 变量只是没有在页面之间传递。

奇怪的是,在Firefox甚至在Microsoft Edge中它们确实有效。

我主要使用谷歌浏览器我 99.5% 的时间),它是一个很好的浏览器。

但在这种情况下,我的登录密码保护网站来自第三方网站,托管在他们的 IFRAME中,my _SESSIONS vars just don't seem to work尽管他们多年来一直这样做!

session_start();在所有文件的顶层。

我什至删除了3rd -party 网站我自己域的缓存cookie,甚至重新安装了 Chrome没什么

在问这个问题之前我在互联网上进行了挖掘,似乎它可能是一个从网站传递_SESSION var through到一个HTTPS网站的问题HTTP。第 3 方网站 ( CodeCanyon.net ) 是HTTPS,我的是HTTP. 但是,为什么一切都在 Firefox 和 Microsoft Edge 中完美运行?

这种情况是否有基于PHP 的解决方法

我不得不说,直到 3-4 周前,多年来一切都运行良好,我偶然发现我无法登录我今天在 CodeCanyon 上出售的演示网站。

=========================

第一次编辑:

标签: phpsessionsession-variables

解决方案


================

在网上挖了6个小时后,我找到了答案。

我的 _SESSIONS 在一个 HTTPS 安全主机(加载在 IFRAME 中)到我的 HTTP 不安全主机之间传输(交叉引用)所需的代码正在添加这个

ini_set('session.cookie_samesite', 'None');
ini_set('session.cookie_secure', 'true');
session_start();

这告诉浏览器我允许通过 _SESSION 数据的安全 HTTPS (cookie_secure = True)在两个不同的主机(cookie_samesite = None)之间进行 传输,因此可以启动 _SESSION。我说的是 PHP 中的 _SESSION cookie 服务器端变量。

但是为了安全传输 _SESSION vars 跨域,或在两个不同的主机(xxx.comyyy.net)之间,我的目的也必须是 HTTPS。

因此,将 _SESSION 变量从主机传输到另一个不同主机的唯一方法是真正的安全连接,如果您没有启用 HTTPS,则需要为您的域名获取 HTTPS 证书。

因此,只有在您的域上启用了 HTTPS时,上述这些变量才有效(例如,去购买HTTPS 证书,在我的国家/地区价格从14 欧元开始,您通常可以在您拥有域和托管的托管公司找到这些权利)。

====================


推荐阅读