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

Php Magento和跨商店同步会话的最佳方式,php,session,magento,Php,Session,Magento,我使用令牌传递技术和远程iframe或img在Magento的两个不同域之间同步会话。我即将在Magento中实现它,并正在寻找一些指针 我必须做两件事: 每隔5分钟,为第二个域输出一个带有远程SRC属性的iframe或img。 问:在哪里实施这一点最好?在过去,我通过重写Magento中的renderLayout()方法来执行商店范围的操作。我应该在页面加载的末尾附加一个块吗?如果我使用块,它仍然保持MVC吗 调用脚本时,我需要同步其他域上的会话。我需要设置与Magento相同的cooki

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

我必须做两件事:

  • 每隔5分钟,为第二个域输出一个带有远程SRC属性的iframe或img。
    • 问:在哪里实施这一点最好?在过去,我通过重写Magento中的renderLayout()方法来执行商店范围的操作。我应该在页面加载的末尾附加一个块吗?如果我使用块,它仍然保持MVC吗
  • 调用脚本时,我需要同步其他域上的会话。我需要设置与Magento相同的cookie,为用户链接到该会话。
    • 考虑到这一点,我想我必须加载Mage::app或加载Magento环境的任何调用
    • 有没有更轻松的方法
  • 为了更好地理解我在做什么,这里是对流程的快速描述

  • 用户转到站点A。如果同步会话的时间到了,则会输出一个IMG或IFRAME,其中SRC指向Site-b.com/sessionSyncer?token=SHA1TOKEN
  • SessionSyncer验证令牌,如果是,则创建会话并将cookie发送到该会话的浏览器。这应该以Magento的方式进行
  • 我知道Magento能够通过URL传递会话并生成链接,但这是不够的,因为用户只能使用这些特殊URL切换站点,而且URL会变得丑陋


    提前谢谢

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

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

    覆盖
    renderLayout
    是过火了。相反,创建一个块,输出img标记并将其包含在基本主题中,可能是在之前的区域,该区域将安全地放置在所有页面上

    发明您自己的令牌也是一种过分的做法,因为Magento使用PHP会话标识符,并自动将其放置在外部域中。您的自定义块可能与以下内容有关:

    $this->getUrl('OTHER/STORE/PATH', array('_store' => 'YOUR_STORE_CODE'))
    
    如果您认为您的脚本需要
    Mage::app()
    ,那么您最好使用一个类似的控制器。遇到SID值时,会话将在后台更新,设置cookies等

    它使用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时,请使用参数强制创建一个干净的URL。

    这适用于多个服务器。我把这个问题解释为有一台服务器和一个Magento安装服务于两个商店。这是正确的,忘记提到我们正在使用的设置是一个Magento“网站”,该网站下有两个商店。相同的代码库,相同的服务器环境。您可以在一个网站下与多个商店视图共享购物车。然后从后端打开它。这基本上就是会话共享,可能会在body结束之前使用。但是如果我是正确的,我必须为所有的一列、两列和三列布局文件实现到布局xml中。我们有一个用例,人们可能会登录到“站点2”,而不点击“站点1”中的链接,而是在其中键入url,或点击电子邮件中的链接。欣赏img代码,我比以前更喜欢它,因为我不需要从磁盘读取。非常感谢钟表爱好者。如果您指定
    布局句柄,它也可以工作。会话特定的URL将仅由iframe/img使用,因此用户不会直接看到。当访问“站点2”而不访问“站点1”时,将不会有要同步的会话,因此在.interest中键入任何URL都不会有问题。我从来没有这样想过。谢谢发条机