如何让opencart多商店在多个TLD上共享相同的购物车?

时间:2013-11-27 20:50:52

标签: session-cookies opencart cart

我有以下情况:

  • domain1.com - store1 - opencart 1.5.6已安装
  • domain2.com - store2
  • domain3.com - store3

我设法在不同的域上安装所有3个商店,并且所有商店都使用相同的opencart安装(store1)。到目前为止,所有似乎都正常工作。我需要的是当用户在 domain1.com 上,在他的购物车中添加 product1 ,然后导航到 store2(domain2.com)并且在他的购物车中添加了 product2 - 现在他应该从 shop1 shop2 中同时拥有 product1 shop2 < / em>在他的购物车中。换句话说,如果用户登录到 store1 ,所有商店都应该像一个商店,那么当他导航到 store2时,他应该保留他的登录会话,购物车和所有其他选项 store3

有没有办法实现这个目标?

注意:如果商店安装在多个子域中但未使用不同的域,我知道如何实现此目的。

1 个答案:

答案 0 :(得分: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时,由于重定向,页面加载将至少翻倍。