Session Opencart购物车跨多个具有不同子域的商店

Session Opencart购物车跨多个具有不同子域的商店,session,opencart,cart,Session,Opencart,Cart,Hi有一个单一的opencart安装安装程序,其中有多个具有不同子域的商店(都在同一个域下)。我希望客户能够将商品放在一个站点的购物车中,然后移动到下一个站点,放入更多甚至减去,直到最终客户在任何一家商店结账。注意:产品可能会出现在一家商店中,但不会出现在另一家商店中 我注意到opencart在某种程度上做到了这一点。ie将把购物车中的产品带到下一家商店,但前提是两个商店都有产品。此外,如果客户随后删除其中一个项目并移回同一商店,他们的产品将重新出现 第一个问题似乎首先是购物车中的产品通过一个查

Hi有一个单一的opencart安装安装程序,其中有多个具有不同子域的商店(都在同一个域下)。我希望客户能够将商品放在一个站点的购物车中,然后移动到下一个站点,放入更多甚至减去,直到最终客户在任何一家商店结账。注意:产品可能会出现在一家商店中,但不会出现在另一家商店中

我注意到opencart在某种程度上做到了这一点。ie将把购物车中的产品带到下一家商店,但前提是两个商店都有产品。此外,如果客户随后删除其中一个项目并移回同一商店,他们的产品将重新出现

第一个问题似乎首先是购物车中的产品通过一个查询显示出来,我猜这是一个按商店id选择产品的查询。我仔细看了看,是否能找到任何东西,但我不知所措

第二个问题似乎与会议内容有关。我仍在学习php,甚至对如何修改会话的工作方式感到有点困惑


任何人都可以提供一些关于如何修复/更改此问题的指导。

OpenCart会在您的PHP会话中存储所有这些信息。由于您的存储位于不同的子域下,因此当您从一个存储切换到另一个存储时,PHP会话会发生变化

因此,您需要做的第一件事是在所有子域之间共享会话。默认情况下,PHP使用“PHPSESSID”cookie跨多个页面传播会话数据,默认情况下,它在cookie声明中使用当前顶级域和子域

示例:www.domain.com

这样做的缺点是会话数据不能与您一起传输到其他子域。因此,如果您在www.domain.com上启动会话,会话数据将在forums.domain.com上不可用。解决方案是在设置“PHPSESSID”cookie时更改PHP使用的域

假设在每个PHP页面的顶部都包含一个init文件,那么可以使用ini_set()函数。只需将其添加到初始页面的顶部:

ini_set('session.cookie_domain',
substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
这行代码将域从子域中删除

示例:forums.domain.com->.domain.com

现在,每当PHP设置“PHPSESSID”cookie时,cookie将可用于所有子域

您可能还需要对OpenCart的核心进行一些小的修改,以使其工作


玩得开心:)

OpenCart在PHP会话中存储所有这些信息。由于您的存储位于不同的子域下,因此当您从一个存储切换到另一个存储时,PHP会话会发生变化

因此,您需要做的第一件事是在所有子域之间共享会话。默认情况下,PHP使用“PHPSESSID”cookie跨多个页面传播会话数据,默认情况下,它在cookie声明中使用当前顶级域和子域

示例:www.domain.com

这样做的缺点是会话数据不能与您一起传输到其他子域。因此,如果您在www.domain.com上启动会话,会话数据将在forums.domain.com上不可用。解决方案是在设置“PHPSESSID”cookie时更改PHP使用的域

假设在每个PHP页面的顶部都包含一个init文件,那么可以使用ini_set()函数。只需将其添加到初始页面的顶部:

ini_set('session.cookie_domain',
substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
这行代码将域从子域中删除

示例:forums.domain.com->.domain.com

现在,每当PHP设置“PHPSESSID”cookie时,cookie将可用于所有子域

您可能还需要对OpenCart的核心进行一些小的修改,以使其工作


玩得开心:)

在Tohids帮助之后,我有以下解决方案,希望它能帮助其他人。我将cookie_域代码行添加到session.php文件中,并在使用setcookie函数覆盖货币和语言cookie的地方添加或更改cookie名称

open\system\session.php

发现

在后面插入

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
open\index.php

发现

替换为

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {      
  setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}           
if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
  setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
  setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
发现

替换为

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {      
  setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}           
if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
  setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
  setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
开放系统\currency.php

发现

替换为

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {      
  setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}           
if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
  setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
  setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}

在Tohids的帮助下,我有以下解决方案,希望它能帮助其他人。我将cookie_域代码行添加到session.php文件中,并在使用setcookie函数覆盖货币和语言cookie的地方添加或更改cookie名称

open\system\session.php

发现

在后面插入

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
open\index.php

发现

替换为

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {      
  setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}           
if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
  setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
  setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
发现

替换为

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {      
  setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}           
if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
  setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
  setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
开放系统\currency.php

发现

替换为

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {      
  setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}           
if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
  setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}
if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
  setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
}

非常简单的解决方案!跨子域共享登录会话

  • 打开文件:system/library/session.php
  • 查找行:session_set_cookie_params(0,“/”)
  • 追加:session_set_cookie_参数(0,“/”,“.DOMAIN.COM 确保在DOMAIN.COM之前包含句点“”


    就这样。。。现在,在www.domain.com上启动的登录会话与www.sub.domain.com共享非常简单的解决方案!跨子域共享登录会话

  • 打开文件:system/library/session.php
  • 查找行:session_set_cookie_params(0,“/”)
  • 追加:session_set_cookie_参数(0,“/”,“.DOMAIN.COM 确保在DOMAIN.COM之前包含句点“


    就这样。。。现在,由于HID,在www.domain.com上启动的登录会话与www.sub.domain.com

    共享。这个解释帮助我更好地理解会话。我设法在opencart核心文件中进行了排序和导航,所有文件似乎都正常工作。多亏了HID。这个解释帮助我更好地理解会话。我设法在opencart核心文件中进行排序和导航