2010-06-17 81 views
1

我們網站的一部分將使用構建Symfony其他Magento。我想知道是否有可能在他們中的兩個之間共享用戶會話變量。在Magento和Symfony之間共享用戶會話變量

謝謝!

+0

會議是這些日子裏有一個模糊的詞彙。您可能想要添加更多詳細信息。 – 2010-06-17 16:44:08

+0

嗯,我想實現的是,一個登錄用戶在系統的兩個部分被識別 – spacemonkey 2010-06-17 17:42:43

回答

2

經過多次試驗和錯誤,我創建了以下工作。這是基於登錄由Magento以外的平臺管理的情況。

我無法找到與Magento之外初始化的Magento共享會話的方法。相反,我創建了一個簡單的Magento擴展,該擴展掛鉤到事件觀察者'http_response_send_before'。

現在每當Magento加載頁面時,模塊都會檢查用戶是否登錄到其他系統。如果是這樣,它將檢索該用戶的電子郵件,並使用電子郵件地址作爲標識將用戶登錄到Magento,併爲該客戶設置會話。很明顯,客戶必須已經存在於Magento中才能登錄工作。

這裏是包含的文件和代碼。隨意修改以與您的系統一起工作。

/app/code/local/Verve/Session/etc/config.xml

<config> 
<modules> 
    <Verve_Session> 
     <version>0.5.1</version> 
    </Verve_Session> 
</modules> 
<frontend> 
    <events> 
     <http_response_send_before> 
      <observers> 
       <session_login> 
        <type>model</type> 
        <class>Verve_Session_Helper_Login</class> 
        <method>loginEvent</method> 
       </session_login> 
      </observers> 
     </http_response_send_before> 
    </events> 
</frontend> 

/app/code/local/Verve/Session/Helper/Login.php

class Verve_Session_Helper_Login extends Mage_Core_Helper_Abstract 
{ 

static function loginEvent($observer) { 

    $session = Mage::getSingleton('customer/session'); 

    if (!$session->isLoggedIn()) { 


     YOUR CODE HERE, FIND EMAIL OF LOGGED IN USER 


     if(@$email){ 

      $customer = Mage::getModel('customer/customer'); 
      $customer->loadByEmail($email); 
      $session = Mage::getSingleton('customer/session'); 
      $session->start(); 
      $session->setCustomer($customer); 
      $url  = $_SERVER['REQUEST_URI']; 
      Mage::app()->getFrontController()->getResponse()->setRedirect($url); 

     } 


    } 

} 

} 

/app/etc/modules/Verve_Session.xml

<config> 
<modules> 
    <Verve_Session> 
     <active>true</active> 
     <codePool>local</codePool> 
    </Verve_Session> 
</modules> 
</config> 
+0

做得好的Komra!謝謝......但 可以解釋我如何「檢查,看用戶是否登錄到其他系統」? 來自Symfony的API? – 2011-01-25 19:48:24

相關問題