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 var在CodeCanyon 的网站上,我似乎无法在 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 网站,今天偶然。
========================
第一次编辑:
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.com和yyy.net)之间安全传输 _SESSION 变量,我的端也必须是 HTTPS。
因此,将 _SESSION 变量从一个主机传输到另一个不同主机的唯一方法是真正的安全连接,如果您没有启用 HTTPS,则需要为您的域名获取 HTTPS 证书。
因此,上述变量仅在您的域上启用了HTTPS 时才起作用(例如,去购买HTTPS 证书,在我的国家/地区价格从14 欧元起,您通常可以在拥有域和托管的托管公司上找到这些变量)。
===================