在具有不同域的商店之间共享会话


8

我在Magento装置上有三个网站,每个网站都有自己的域。

现在,由于Web浏览器的安全性,您无法访问其他域的Cookie,也无法访问会话。

我需要以某种方式能够在具有不同域的两个不同商店之间传递临时数据。

我的特定用例:

我正在使用GeoIP触发重定向到正确的国家/地区存储,但是我还需要能够手动覆盖它。现在,我遇到的问题是,我要使用Cookie在当前商店上手动覆盖,但是当我重定向到另一商店时,另一商店上没有Cookie,因此它回退并查找用户基于GeoIP的商店。但是,这随后在太存储之间创建了一个无限循环重定向。

这是通过找出要index.php与自定义模块一起使用的商店的网站代码,并使用正确的代码运行Magento来完成的。然后为我处理所有重定向等。


您的商店视图是否放置在其他网站上?我指的是Magento术语中的网站。如果是的话,你可能还需要阅读这篇文章,解释,如何创建一个简单的扩展,这股不同的Magento网站的购物车:marius-strajeru.blogspot.com/2013/01/...
ceckoslab

Answers:


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

这里讨论了此建议的一些安全隐患security.stackexchange.com/questions/174678/…–
Goose

3

只需使用重定向,?SID=yourSessionId您就可以在其他商店视图上使用它。


Magento没有配置来启用URL中的SID?我认为在“配置”>“ Web”>“会话”中有一些内容。没有?
西尔文·雷(SylvainRayé)2013年

是的,当您在商店视图之间重定向时。有东西,但是如果您手动进行,我认为这不起作用。但是,是的,卢克(Luke),在后端对此进行了研究,因此可能使生活更轻松:)
Fabian Blechschmidt

此功能已启用,但默认情况下我不为我工作。我们创建的模块旨在根据IP定位位置,然后进行相应的定向,还允许人们选择商店。在开始调用Mage :: run之前,我只是在计算mage_run_code。但是我不知道如何在运行
Mage

只需在代码中搜索SID。一切都在这里发生:\Mage_Core_Model_Session_Abstract::setSessionId()因此只需检查会话ID的设置时间并进行设置即可。
Fabian Blechschmidt

1
建议时可能要更具体。如果将SID附加到可从链接获得的URL上,则用户可以在论坛或其他地方共享该链接,这会导致各种问题。
pspahn 2014年

2

只要确保Use SID in frontend已启用。

任何 ...

  • 产生的网址 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年

由于您自己的代码,您将具有重定向循环。在这里,我没有真正的办法可以帮助您,因为您的问题太局限了。
Ben Lessani-Sonassi

0

在您的管理员中,转到“配置”>“ Web”>“会话”>“在前端上使用SID”并启用。

当从一个站点转到另一个站点时,通过将其包含在url中来传递会话(&如果您已经使用?$_GET参数,则使用该参数)

?SID=<?php echo Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.