2

こんにちは、異なるサブドメイン(すべて同じドメインの下にある)を持つ複数のストアで単一のopencartインストールセットアップがあります。私は、顧客が1つのサイトのカートに商品を入れてから、次のサイトに移動して、最終的に顧客がどの店舗でもチェックアウトするまで、さらに多くまたは差し引くことができるようにしたいと考えています。商品はある店舗には表示されるが、別の店舗には表示されない場合があることに注意してください。

opencartがこれをいくらか行っていることに気づきました。つまり、カートにすでに入っている商品を次の店舗に運びますが、商品が両方の店舗に表示されている場合に限ります。さらに、顧客がアイテムの1つを削除して同じストアに戻ると、製品が再表示されます。

最初の問題は、最初にカート内の商品がstore_idで商品を選択するクエリであると私が推測するものを通して表示されていることであるようです。私は何かを見つけることができるかどうかを確認するのに苦労しましたが、途方に暮れています。

2番目の問題はセッションの内容にあるようです。私はまだphpを学んでいて、セッションの動作を変更しようとする方法について少し混乱しています。

誰かがこれを修正/変更する方法についていくつかのガイダンスを提供できますか?

4

3 に答える 3

3

OpenCartは、これらすべての情報をPHPセッションに保存します。ストアは異なるサブドメインの下にあるため、あるストアから別のストアに切り替えると、PHPセッションが変更されます。

したがって、最初に行う必要があるのは、すべてのサブドメイン間でセッションを共有することです。デフォルトでは、PHPは「PHPSESSID」Cookieを使用してセッションデータを複数のページに伝播し、デフォルトでは、Cookie宣言で現在のトップレベルドメインとサブドメインを使用します。

例:www.domain.com

これの欠点は、セッションデータが他のサブドメインに移動できないことです。したがって、www.domain.comでセッションを開始した場合、forums.domain.comではセッションデータが利用できなくなります。解決策は、PHPが「PHPSESSID」Cookieを設定するときに使用するドメインを変更することです。

すべてのPHPページの上部に含めるinitファイルがあるとすると、ini_set()関数を使用できます。これをinitページの上部に追加するだけです。

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のコアに少し変更を加える必要がある場合もあります。

楽しむ :)

于 2012-08-23T17:43:56.930 に答える
1

Tohidsが助けてくれた後、私は次の解決策を手に入れました。うまくいけば、それは他の人にも役立ちます。cookie_domainコード行をsession.phpファイルに追加し、通貨と言語のCookieをカバーするためにsetcookie関数が使用された場所でcookie名を追加または変更しました。

\ system\session.phpを開きます

探す;

ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');

後に挿入;

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

\index.phpを開きます

探す;

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {      
  setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);
}

と置換する;

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, '/');
}

と置換する;

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));
}

system\currency.phpを開きます

探す;

if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
  setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
}

と置換する;

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));
}
于 2012-08-30T12:30:23.203 に答える
0

非常に簡単な解決策!サブドメイン間でログインセッションを共有する

  1. ファイルを開く:system / library / session.php
  2. 検索行:session_set_cookie_params(0、'/');
  3. APPEND:session_set_cookie_params(0、'/'、' . DOMAIN.COM);

ピリオド「。」を必ず含めてください。DOMAIN.COMの前

それだけです...www.domain.comで開始されたログインセッションはwww.sub.domain.comと共有されます

于 2016-05-20T13:23:51.573 に答える