異なるドメインのストア間でセッションを共有する


8

Magentoインストールに3つのWebサイトがあり、それぞれに独自のドメインがあります。

Webブラウザのセキュリティのため、別のドメインのCookieやセッションにはアクセスできません。

どういうわけか、異なるドメインを持つ2つの異なるストア間で一時データを渡すことができる必要があります。

私の特定のユースケース:

GeoIPを使用して正しい国のストアへのリダイレクトをトリガーしていますが、これを手動で上書きできるようにする必要もあります。現在、現在のストアをCookieで手動で上書きしているという問題がありますが、他のストアにリダイレクトされたときに、他のストアにCookieがないため、フォールバックしてユーザーを検索しますGeoIPに基づくストア。ただし、これにより、ストア間でリダイレクトする無限ループが作成されます。

これはindex.php、カスタムモジュールで使用するストアのWebサイトコードを理解し、正しいコードでMagentoを実行することによって行われます。これにより、すべてのリダイレクトなどが処理されます。


ストアビューは別のWebサイトに配置されていますか?私はMagentoの用語でウェブサイトを意味します。はいの場合、この記事を読む必要があるかもしれません。それは、異なるMagento Webサイト間でショッピングカートを共有する単純な拡張機能の作成方法を説明しています。marius
strajeru.blogspot.com

回答:


5

frontendそのソリューションainixon.me/set-cookie-on-cross-domainsを使用して、異なるドメインを持つmagentoウェブサイト間でCookie を共有できます。

cookies.php次のコードでファイルを作成する必要があります

<?php
    setcookie("frontend", htmlspecialchars($_GET['SID']), time() + 86400);
?>

そしてmagentoテンプレートでは、<body>タグの後に次のコードを追加する必要があります

<?php 
$this_session_id = Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); 
?>
<!-- setting cookies to other domains --> 
<img src="http://anotherdomain.com/cookies.php?SID=<?php echo $this_session_id; ?>" style="display:none;" />
<img src="http://somedomain.ne/cookies.php?SID=<?php echo $this_session_id; ?>" style="display:none;" /> 
<!-- setting cookies to others domains ends -->

こんにちはあなたのソリューションは素晴らしいです。しかし、私はmagento 2.1.3バージョンについて少し混乱しています。この新しいバージョンでは、このコードをどこに入力すればよいですか?
Zammuuz 2017年

この提案のいくつかのセキュリティへの影響は、ここで議論されたsecurity.stackexchange.com/questions/174678/...
グース

3

リダイレクト?SID=yourSessionIdするだけで、他のストアビューで使用できます。


Magentoには、URLでSIDを有効にするかどうかの設定がありませんか?構成> Web>セッションに何かがあると思います。番号?
SylvainRayé2013年

はい、ストアビュー間でリダイレクトした場合。何かありますが、手動でやるとうまくいきません。しかし、はい、ルークは、バックエンドでこれを調べ、結果として、生活を楽にするかもしれません:)
Fabian Blechschmidt

これは既に有効になっていますが、デフォルトでは機能しません。私たちが作成したモジュールは、IPに基づいて場所を取得し、それに応じて指示するように設計されています。また、人々が店舗を選択できるようにします。Mage :: runが最初に呼び出される前に、単にmage_run_codeを作成しています。しかし、私はメイジ実行する前に、カスタムのセッション値を追加し、これは/ URLコアに処理されるようにも、URLリダイレクトに追加セッションIDを持つことができるかわからない
lukefowell

SIDのコードを検索してください。ここですべてが発生します。\Mage_Core_Model_Session_Abstract::setSessionId()セッションIDが設定されていることを確認し、設定してください。
Fabian Blechschmidt 2013年

1
これを提案するときは、より具体的にする必要があります。SIDがリンクから利用可能なURLに追加されている場合、ユーザーはそのリンクをフォーラムなどで共有する可能性があり、さまざまな問題が発生します。
pspahn 2014年

2

ただUse SID in frontend有効になっていることを確認してください。

どれか ...

  • によって生成されたURL Mage::getUrl()
  • $this->_redirectUrl($url);またはでリダイレクトMage::app()->getFrontController()->getResponse()->setRedirect()

その後、尊敬が含まれますSID

filesセッションストレージに使用している場合は、ディレクトリが一般的に存在することを確認してくださいsymlinked。Memcache / Redis / DBを使用している場合、これは問題ではありません。

-

ただ注意してください、Magentoよりも上にGeoIPリダイレクトを処理する多くの優雅な方法があります。これは、Webサーバーレベルで行うことができます(それぞれの「リダイレクトなし」Cookieの存在を確認します)。


最初はURLの末尾にSIDが含まれていることを発見しましたが、円を描くようにリダイレクトし続けます。私がやりたいのは、手動でリダイレクトしてセッション値を設定し、次回IPの検索を停止して、元の場所に送信し直すときです。しかし、magentoのファクトリメソッドにアクセスしたり、セッションデータを取得したりすると、「Mageレジストリキー "controller"はすでに存在します」などのエラーが表示されます。もう一度検索しないでください。」何か案は?
lukefowell 2013年

独自のコードが原因でリダイレクトループが発生します。私がここであなたを助けることができる実際の方法はありません、あなたの問題はあまりにもローカライズされています。
ベンレッサーニ-ソナッシ2013年

0

管理者で、[構成]> [ウェブ]> [セッション]> [フロントエンドでSIDを使用]に移動して有効にします。

あるサイトから別のサイトに移動する&場合、これをURLに含めることでセッションを渡します(既にパラメーターに使用?している場合に使用$_GET

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.