Magento和跨商店同步会话的最佳方式

时间:2011-02-12 23:28:09

标签: php session magento

我正在使用带有远程iframe或img的令牌传递技术为Magento在两个不同域之间同步会话。我即将把它实现到Magento并且正在寻找一些指示。

我必须做两件事:

  1. 每隔5分钟输出一个iframe或img,其中包含第二个域的远程SRC属性。
    • Q值。实施这个的最佳地点在哪里?在过去,我通过覆盖Magento中的renderLayout()方法进行了整个行动。我应该通过在页面加载结尾附加一个块来实现吗?如果我使用一个块,它仍然保持MVC吗?
  2. 调用脚本时,我需要在其他域上同步会话。我需要设置Magento设置的相同cookie,链接到该用户的会话。
    • 考虑到这一点,我想我将不得不加载Mage :: app或任何加载Magento环境的电话。
    • Q值。有没有更轻松的方法呢?
  3. 为了更好地理解我在做什么,这里有一个流程的快速描述。

    1. 用户进入站点A.如果是时间同步会话,则输出IMG或IFRAME,SRC指向site-b.com/sessionSyncer?token=SHA1TOKEN
    2. sessinSyncer验证令牌,如果是,则创建会话并将cookie发送到会话的浏览器。这应该以Magento的方式进行
    3. 我知道Magento能够通过URL传递会话并生成链接以执行此操作,但这是不够的,因为用户必须仅使用这些特殊网址切换网站,并且URL变得难看。

      提前致谢!

2 个答案:

答案 0 :(得分:0)

在DB中存储会话并复制数据库表或整个数据库会更容易。您可以在local.xml中配置它

<session_save><![CDATA[db]]></session_save>

答案 1 :(得分:0)

覆盖renderLayout是过度的。而是创建一个块,输出你的img标签,并将其包含在基本主题中,可能用于区域before_body_end,它将安全地放在所有页面上。

由于Magento正在使用PHP会话标识符并将其自动放置到外部域,因此创建自己的令牌也是过度的。您的自定义屏蔽可以generate the URL使用:

$this->getUrl('OTHER/STORE/PATH', array('_store' => 'YOUR_STORE_CODE'))

如果您认为您的脚本需要Mage::app(),那么您也可以使用类似功能的控制器。在遇到SID值时,会话将在幕后更新,cookie设置等。

它使用iframe它不需要输出任何东西,如果一个小图像可以像这样静态:

print "GIF89a\1\0\1\0\x80\0\0\xff\xff\xff\xff\xff\xff!\xf9\4\1\n\0\1\0,\0\0\0\0\1\0\1\0\0\2\2L\1\0;";

<子>的 P.S。
在没有SID的情况下创建外部存储的URL时,请使用_nosid参数强制使用干净的URL。