在新窗口从第三方网站返回我的网站后,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.comexample.com之间变化,但始终为https://www.example.com

有人知道为什么会发生这种情况吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)