当来自第 3 方 IFRAME 时,Chrome 不保留我的 _SESSION 变量,但直接访问时效果很好

Adr*_*ase 5 php session session-variables

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

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

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

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

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

奇怪的是,在Firefox 中,甚至在Microsoft Edge 中,它们都可以工作。

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

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

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

我甚至删除了缓存饼干第三方网站我自己的域名,甚至重新安装Chrome的一次。没什么

问这个问题之前在网上搜了一下,好像是_SESSION var through从一个HTTPS网站到一个网站的问题HTTP。第 3 方网站 ( CodeCanyon.net )HTTPS和我的是HTTP. 但是,为什么一切都可以在 Firefox 和 Microsoft Edge 中完美运行?

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

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

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

第一次编辑:

  • 只是为了让事情更直观,当从 3rd 方供应商网站的 IFRAME 访问我的一段代码时,在 Firefox 上它会显示 session_id() 并保持在那里,即使我刷新页面、登录并正确执行所有操作。
  • 在 Chrome 中,它不起作用,每次我刷新我的代码所在的页面时,都会有一个不同的 session_id(),它在 login.php 表单中也不同。为什么?

Adr*_*ase 16

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

经过6个小时的网上挖掘,我找到了答案。

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

ini_set('session.cookie_samesite', 'None');
ini_set('session.cookie_secure', 'true');
session_start();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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