Chrome 在来自第 3 方 IFRAME 时不会保留我的 _SESSION 变量,但在直接访问时可以完美运行

2024-04-01

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

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

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

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

但是当我检查我的代码片段时(all using password-protection and _SESSIONS var, on CodeCanyon 的网站, 我似乎无法在 Google Chrome 中登录它们,因为 _SESSIONS 变量只是没有通过从一页到另一页。

奇怪的是,在Firefox甚至在微软边缘他们确实工作。

我主要工作于谷歌浏览器 (我99.5%的时间),这是一个很好的浏览器。

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

I have session_start();位于所有文件的顶层。

我什至删除了cache and cookies为了第三方网站并为我自己的域名, 乃至重新安装了Chrome again. Nothing.

问这个问题之前在网上查了一下,貌似可能是pass的问题_SESSION var through从一个HTTPS网站向HTTP一。第 3 方网站(CodeCanyon.net) is HTTPS我的是HTTP。但是,为什么一切在 Firefox 和 Microsoft Edge 中都能完美运行呢?

有没有针对这种情况的基于 PHP 的解决方法?

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

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

第一次编辑:

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

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

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

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

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

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

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

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

所以上面的这些变量起作用ONLY如果你有已启用 HTTPS在您的域上 (例如,去买一个HTTPS证书,在我国价格从14 EUR,通常可以在拥有域名和托管的托管公司上找到这些)。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Chrome 在来自第 3 方 IFRAME 时不会保留我的 _SESSION 变量,但在直接访问时可以完美运行 的相关文章

随机推荐