php - 当来自第 3 方 IFRAME 时,Chrome 不保留我的 _SESSION 变量,但在直接访问时完美运行
问题描述
直到几周后,我所有的网站都运行良好。
我编写代码并在 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();
在所有文件的顶层。
我什至删除了3rd -party 网站和我自己域的缓存和cookie,甚至重新安装了 Chrome。没什么。
在问这个问题之前我在互联网上进行了挖掘,似乎它可能是一个从网站传递_SESSION var through
到一个HTTPS
网站的问题HTTP
。第 3 方网站 ( CodeCanyon.net ) 是HTTPS
,我的是HTTP
. 但是,为什么一切都在 Firefox 和 Microsoft Edge 中完美运行?
这种情况是否有基于PHP 的解决方法?
我不得不说,直到 3-4 周前,多年来一切都运行良好,我偶然发现我无法登录我今天在 CodeCanyon 上出售的演示网站。
=========================
第一次编辑:
- 只是为了让事情更直观,当从 3rd 方供应商网站的 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();
这告诉浏览器我允许通过 _SESSION 数据的安全 HTTPS (cookie_secure = True)在两个不同的主机(cookie_samesite = None)之间进行 传输,因此可以启动 _SESSION。我说的是 PHP 中的 _SESSION cookie 服务器端变量。
但是为了安全传输 _SESSION vars 跨域,或在两个不同的主机(xxx.com和yyy.net)之间,我的目的也必须是 HTTPS。
因此,将 _SESSION 变量从主机传输到另一个不同主机的唯一方法是真正的安全连接,如果您没有启用 HTTPS,则需要为您的域名获取 HTTPS 证书。
因此,只有在您的域上启用了 HTTPS时,上述这些变量才有效(例如,去购买HTTPS 证书,在我的国家/地区价格从14 欧元开始,您通常可以在您拥有域和托管的托管公司找到这些权利)。
====================
推荐阅读
- mdx - MDX 问题 - 使用具有排名/顺序功能的最高计数
- javascript - 使元素在 div 中出现并跟随鼠标,并在鼠标离开 div 时消失
- asp.net - 重写规则:关于正则表达式模式的问题
- python - Numpy:用较小的 FAST 填充矩阵
- cron - Quartz调度删除文件
- amazon-web-services - AWS CodePipeline 构建/部署单个项目
- opencl - OpenCL API 中的类型转换 (void *)&c_mem_obj
- ruby-on-rails - 自定义验证未设置回滚并返回错误
- android - Android 图像不自动缩放或反映选项设置
- php - 选项可以从php中选择