当来自第三方IFRAME时,Chrome无法保留我的_SESSION变量,但在直接访问时可以完美运行

问题描述

直到几个星期,我所有的网站都运行良好

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

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

如果我直接在自己的域上工作,如在URL栏中键入链接,则在任何浏览器(meaning,all my _SESSION vars are kept,all throughout)中一切正常。

但是,当我在 CodeCanyon网站上检查代码段(all using password-protection and _SESSIONS var时, 我似乎无法在Google Chrome浏览器中登录到他们,因为_SESSIONS变量只是不通过页面之间传递。

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

我主要在 Google Chrome 中工作(占我时间的99.5%),这是一个很好的浏览器。

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

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

我什至删除第三方网站我自己的域缓存 cookies ,甚至重新安装Chrome 没什么

我在问这个问题之前在互联网上进行了挖掘,看来将_SESSION var throughHTTPS网站传递到HTTP一个网站可能是一个问题。第三方网站( CodeCanyon.net )是HTTPS,而我的网站是HTTP。但是,为什么一切都可以在Firefox和Microsoft Edge上完美运行?

在这种情况下是否存在基于 PHP解决方法

我不得不说,直到3-4周前,一切都已经运行了好几年,而且我偶然发现,今天我无法登录自己在CodeCanyon上出售的DEMO网站

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

第一次编辑:

  • 只是为了使内容更直观,当从第三方供应商网站的IFRAME访问我的代码时,在Firefox上它显示session_id()并停留在该位置,即使我刷新页面登录并正确执行所有操作。
  • 在Chrome中,
  • 在不起作用的地方 ,每次我刷新代码所在的页面时,都会有一个不同的session_id(),在login.PHP FORM中,这是不同的好。为什么?

解决方法

我认为这与-https://blog.heroku.com/chrome-changes-samesite-cookie

有关 ,

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

在Internet上搜索了6个小时之后,我找到了答案。

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

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

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

但是为了使_SESSION vars跨源安全地传输,或在两个不同的主机( xxx.com yyy.net )之间进行安全传输,也是HTTPS。

因此,将_SESSION var从一个主机传输到另一个不同的主机的唯一方法是真正的SECURE连接,如果您未启用HTTPS, 您需要获取HTTPS证书作为您的域名。

因此,如果您在域上启用了 HTTPS ,则以上这些变量仅起作用 (例如,购买 HTTPS证书,在我的国家/地区,价格起价为 14欧元,通常您可以在拥有域名和托管位置的托管公司中找到这些价格)。

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