【问题标题】:how to make opencart multi-store share same cart over multiple TLDs?如何使 opencart 多商店在多个 TLD 上共享同一个购物车?
【发布时间】:2013-11-27 20:50:52
【问题描述】:
我有以下场景:
- domain1.com - store1 - opencart 1.5.6 已安装
- domain2.com - store2
- domain3.com - store3
我设法在不同的域上安装了所有 3 个商店,并且它们都使用相同的 opencart 安装 (store1)。到目前为止,一切似乎都正常工作。我需要的是当用户在 domain1.com 上时,将 product1 添加到他的购物车中,然后导航到 store2 (domain2.com) 和在他的购物车中添加 product2 - 现在他应该同时拥有来自 shop1 的 product1 和来自 shop2product2 /em> 在他的购物车里。换句话说,所有商店都应该表现得像一个,如果用户登录到 store1,那么当他导航到 store2 时,他应该保留他的登录会话、购物车和所有其他选项em> 或 store3。
有什么办法可以做到吗?
注意:如果商店安装在多个子域中,但不使用不同的域,我知道如何实现这一点。
【问题讨论】:
标签:
session-cookies
opencart
cart
【解决方案1】:
我刚刚找到了解决这个问题的方法,所以我就是这样做的:
我修改/system/library/session.php如下:
if ($_SERVER['HTTP_HOST'] != 'store1.loc') {
if (!isset($_COOKIE["PHPSESSID"]) && !isset($_GET['session_id'])) {
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//get current URL
header('Location: http://store1.loc?getsession=true&url='.base64_encode($actual_link));
}
elseif (isset($_GET['session_id'])) { //set session based on the session_id received from main store
session_destroy();
session_id($_GET['session_id']);
session_start();
header('Location: '. base64_decode($_GET['url'])); //redirect to original requested url
}
}
else {
if (isset($_GET['getsession'])) { //send back session_id
header('Location: http://store2.loc?session_id='.urlencode(session_id()) . '&url=' . $_GET['url']);
}
}
说明:如果用户进入任何不是主商店的商店,则重定向到主商店,如果不存在,则启动会话,然后将会话 ID 发送回请求者通过 url 中的 GET 参数,然后使用相同的会话 id 启动会话,然后它重定向回原始请求的 URL。这样做的缺点是,当用户第一次访问 store2 时,由于重定向,页面加载至少会增加一倍。