首页 > 解决方案 > 在 2 个站点之间转移会话?

问题描述

我有 2 个网站 A.com 和 B.com。我想通过 PHP 会话将我在 A.com 上的购物篮发送到 B.com。例如:我的 A.com 购物篮;

session_start();
$i=0;
$_SESSION['basket'][$i]->name = "apple";
$_SESSION['basket'][$i]->description = "apppppppp";
//..etc

我试图从 B.com 连接,我从会话中看到了注释。我怎样才能看到篮子?

我必须看到这个

{
"loggedInUser": null,
"sessionid": "7hipbcrktd41lk82lvj8n967n0",
"products": [
{
"id": "8850",
"image": "737986198.jpg",
"title": "iPhone X Lansman Red Kılıf",
"code": "PY0088",
"category": "277",
"subcategory": "284",
"products": "284",
"marka": "APPLE",
"model": "iPhone X",
"type": "normal",
"price": "89.90",
"quantity": 1
}
]
}

但我看到了这个

{"loggedInUser":null,"sessionid":"evlddomnf5tn116mu9aqasr2l1"}

即使我设置了 session_id 仍然无法正常工作。请帮忙。

标签: phpsession

解决方案


它将帮助您:

1.如果会话设置在cookie中,则不能转移(除非转移到子域),请确保通过GET转移

2.为了使与SESSION相关的数据在服务器之间同步,您必须共享文件系统,至少对于保存SESSIONS的路径(例如/tmp/php)

3.如果您将对象保存在 SESSION 中,请确保它们在两台服务器上都可用

跨域会话 ID

默认情况下,会话 ID 使用 cookie 传递。由于您的网站位于不同的域上,因此会话 cookie 不会传输过来,因此这是阻止跨域会话工作的一件事。

传递会话 ID 的一种技术是将它们附加到所有请求的查询字符串中(PHP 甚至对此有一定程度的内置支持)。然而,这种做事方式有很多缺点——最重要的是人们一直在复制/粘贴 URL,这意味着揭示有效和重用无效会话 id——因此不推荐使用。

更好的方法是使用 Javascript 跨所有感兴趣的域发出跨域请求(当然这需要合作)。通过这种方式,您可以根据需要在任意数量的服务器之间无缝传输会话 ID。

此问题的一个简单解决方案是使用自定义会话处理程序,将数据存储在数据库或其他全局可访问的存储中。

https://www.php.net/manual/en/session.customhandler.php


推荐阅读