javascript - 新窗口从第三方站点返回到我的站点后 PHP 会话发生变化
问题描述
我有一个 PHP 网站www.example.com
,它有一个用 JS 打开一个新窗口的按钮。然后它通过 AJAX 加载一个唯一的 urlwww.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
}
});
后端 PHP 代码www.example.com/get-url
只需向唯一 url 发出 curl 请求www.thirdpartywebsite.com
,然后返回它。
返回的第三方站点 url 是一个显示项目目录的页面。每个项目都有一个按钮,将用户重定向回我的站点,并在 POST 中使用项目数据。其 urlwww.example.com/get-data
包含以下 PHP 代码:
$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
更有趣的是,这种情况并非每次都发生,也不是每个用户都发生。它有时会在一个用户的一个浏览器上的某一天发生,然后在另一天/时间发生。
我唯一能想到的是域是否在 and 之间发生变化www.example.com
,example.com
但它总是https://www.example.com
.
任何人都知道为什么会发生这种情况?
解决方案
推荐阅读
- angular - 点击事件 - 我有 3 个手风琴,我想知道如何只使用一种方法一次管理一个事件
- python-3.x - 如何使用 REST 的 put 函数替代 post 函数来保存多个数据?
- javascript - 从Angular JS中的不同应用程序加载模板
- ruby-on-rails - 在 Docker Rails 中更改 Postgres 端口
- javascript - array.filter() 删除
函数表达式中的值,而不是箭头函数中的值 - node.js - 使用nodejs从多个集合中获取mongodb集合记录
- android - 如果我的列表为空,如何显示图像?
- ios - 识别标签中显示的属性字符串中的图像点击
- sql - 来自同一个表的所有列都希望在单个查询中以表格形式获取它们
- php - 如何删除错误参数2需要是一个数组()