【发布时间】:2021-01-28 08:36:10
【问题描述】:
我需要帮助解决我不知道如何解决的问题。我遇到的问题是,当我在 iframe 中嵌套另一个寻呼机并且 iframe 在其内部重定向时,它会丢失会话数据。
所以场景是这样的:
-
带有嵌套 iframe 的 index.php =>
<iframe src="http://somedomain/global.php?user=someuser&site=1234567" style="width:100%;height:100%;border:0px;"></iframe> -
global.php 文件在另一个域上创建会话并且会话存在 =>
$sess_path = '/somepath/'; session_save_path($sess_path); ini_set('session.cookie_samesite', 'None'); session_start(); $_SESSION['user'] = $_GET['user']; $_SESSION['site'] = $_GET['site']; header('location: ../home.php'); -
在 iframe 中 global.php 文件重定向到 home.php 并且会话信息丢失
$sess_path = '/somepath/'; $sess_timeout = 30; ini_set('session.gc_maxlifetime', $sess_timeout); ini_set('session.cookie_lifetime', $sess_timeout); ini_set('session.cache_expire', $sess_timeout); ini_set('session.gc_probability', 100); ini_set('session.gc_divisor', 100); session_save_path($sess_path); ini_set('session.cookie_samesite', 'None'); session_start(); -
如果我 print_r $_SESSION 它是空的
我四处搜索并找到了一些答案,但无法使其发挥作用(我很确定我不理解某些东西)。首先,我的应用程序仅基于 Chrome 浏览器,我发现 chrome 现在在处理第三部分重定向方面发生了一些变化。我在 global.php 和 home.php 中都添加了ini_set('session.cookie_samesite', 'None');,但这并没有什么区别。
如果我在 Firefox 上尝试我的测试设置,它会按预期工作,所以这只会让我得出结论,这与 Chrome 有关
我可以要求一些关于如何解决这个问题的白痴证明吗?
谢谢
【问题讨论】:
-
你能确认
global.php和home.php都在同一个域下的同一个目录下吗?我认为这是真的,但你从来没有明确说过。 -
是的,他们在同一个域中
-
我没有声称有解决方案,但我找到了this link,在其他地方我还发现您的cookie 需要具有
Secure属性。我还注意到您使用的是 HTTP 协议而不是 HTTPS 协议。也许这不是一个好主意,Google 喜欢 HTTPS。 -
@KIKOSoftware 我认为你是对的,在 Chrome 中查看 DevTools 上的网络选项卡后,它显示错误未启用安全并且 cookie 被拒绝。你知道任何关于如何在 ubuntu 上设置 https 的好指南吗?
-
不,抱歉,我没有 HTTPS 指南,我在“Plesk”中使用“Let's Encrypt”,这样就可以解决所有问题。叫我懒惰。 ???不知道这对你有没有帮助:letsencrypt.org/docs