如何解决在新窗口从第三方网站返回我的网站后,PHP会话发生了变化
我有一个PHP网站www.example.com
,该网站的按钮打开了一个用JS打开的新窗口。然后,它通过AJAX将唯一的URL加载到www.thirdpartywebsite.com
并设置窗口的URL:
var newWindow = window.open("","_blank","scrollbars=yes,resizable=yes");
ajax("www.example.com/get-url",{
data: someData,success: function(response)
{
newWindow.location = response.url;
// something like www.thirdpartywebsite.com/catalog/12345xyz
}
});
www.example.com/get-url
的后端PHP代码仅向www.thirdpartywebsite.com
发出一个卷曲请求,以获取唯一的URL,然后将其返回。
返回的第三方站点url是显示项目目录的页面。每个项目都有一个按钮,用户可以通过POST中的项目数据将用户重定向到我的站点。带有以下PHP代码的网址是www.example.com/get-data
:
$itemData = $_POST["data"];
echo '<div id="content-json" style="display:none;">' . json_encode($itemData) . '</div>';
echo '<script>';
echo 'var json = document.getElementById("content-json").innerHTML;';
echo 'var data = JSON.parse(json);';
echo 'window.opener.returnCallback(data);';
echo 'window.close();';
echo "</script>';
returnCallback
函数与打开新窗口的按钮在同一页面(主窗口)上:
function returnCallback(data)
{
// Set page's content with data
// ...
}
因此,基本上,我们打开到其他站点的新窗口,用户执行操作,新窗口将使用POST数据重定向回我的站点,将数据作为JS对象提供给主窗口,然后关闭新窗口。
现在的问题是,当新窗口重定向回我的站点时,将重新生成PHP会话ID。我已通过在主窗口的控制台中输入document.cookie
来确认这一点。
在单击按钮以打开新窗口之前,以及在单击新窗口上的按钮之前,请重定向回我的网站:
PHPSESSID=random12345
重定向到我的网站后,新窗口关闭:
PHPSESSID=random67890
更有趣的是,这种情况并非每次都发生,也不是每个用户都发生。有时候,一天在一个浏览器上只有一个用户,然后在另一天/另一天却没有。
我唯一能想到的是,如果域在www.example.com
和example.com
之间变化,但始终为https://www.example.com
。
有人知道为什么会发生这种情况吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。