问题描述
直到几个星期,我所有的网站都运行良好。
我编写代码并在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 through
从HTTPS
网站传递到HTTP
一个网站可能是一个问题。第三方网站( CodeCanyon.net )是HTTPS
,而我的网站是HTTP
。但是,为什么一切都可以在Firefox和Microsoft Edge上完美运行?
我不得不说,直到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欧元,通常您可以在拥有域名和托管位置的托管公司中找到这些价格)。
==================