【问题标题】:Magento and Best Way to Sync Sessions across storesMagento 和跨商店同步会话的最佳方式
【发布时间】:2011-02-12 23:28:08
【问题描述】:

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

我必须做两件事:

  1. 每 5 分钟,为第二个域输出一个带有远程 SRC 属性的 iframe 或 img。
    • 问。实现这一点的最佳地点在哪里?过去,我通过覆盖 Magento 中的 renderLayout() 方法来执行商店范围内的操作。我应该通过在页面加载的末尾附加一个块来做到这一点吗?如果我使用一个块,它仍然保留 MVC 吗?
  2. 调用脚本时,我需要在另一个域上同步会话。我需要设置与 Magento 相同的 cookie,它为用户链接到该会话。
    • 考虑到这一点,我想我将不得不加载 Mage::app 或任何加载 Magento 环境的调用。
    • 问。有没有更轻松的方法?

为了更好地理解我在做什么,这里是对流程的简要描述。

  1. 用户转到站点 A。如果需要同步会话,则输出 IMG 或 IFRAME,其中 SRC 指向 site-b.com/sessionSyncer?token=SHA1TOKEN
  2. sessinSyncer 验证令牌,如果是,则创建会话并将 cookie 发送到会话的浏览器。这应该以 Magento 的方式发生

我知道 Magento 能够通过 URL 传递会话并生成链接以执行此操作,但这还不够,因为用户只能使用那些特殊的 url 切换站点,而且 URL 变得丑陋。

提前致谢!

【问题讨论】:

    标签: php session magento


    【解决方案1】:

    覆盖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;";
    

    附言
    在创建没有 SID 的外国商店的 URL 时,使用 _nosid 参数强制使用干净的 URL。

    【讨论】:

    • 可能最终会使用 before_body_end。但如果我是正确的,我必须在布局 xml 中实现所有一列、二列和三列布局文件。
    • 我想完全避免在 URL 中使用会话。我们有一个用例,人们可能会登录“站点 2”,而不是单击“站点 1”中的链接去那里,而是输入 URL,或单击电子邮件中的链接。欣赏 img 代码,我喜欢它比我正在做的更好,因为我不必从磁盘读取。非常感谢clockworkgeek。
    • 如果您指定<default> 布局句柄,它也可以工作。会话特定的 URL 将仅由 iframe/img 使用,因此用户永远不会直接看到。当访问“站点 2”而不访问“站点 1”时,不会有要同步的会话,因此输入任何 URL 都没有问题。
    • 有趣。没想到是这样的。谢谢发条极客
    【解决方案2】:

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

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

    【讨论】:

    • 这适用于多台服务器。我将这个问题解释为有一台安装了 Magento 的服务器为两家商店提供服务。
    • 没错,忘了提到我们正在使用的设置是一个magento“网站”,该网站下有两个商店。相同的代码库,相同的服务器环境。
    • 您可以在一个网站下与多个商店视图共享购物车。然后从后端打开它。这基本上是会话共享
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多