2013-05-10 33 views
1

我已經制作了一個使用客戶會話的自定義模塊,但是它的奇怪現場網站上沒有返回客戶數據。 我曾嘗試以下方法:客戶會話在自定義模塊magento中爲空

$sessCustomer = Mage::getSingleton('customer/session', array('name' => 'frontend')); 
    echo '<pre>';print_r($sessCustomer->getCustomer()->getData()); echo '</pre>';exit; 

返回:

Array 
(
    [website_id] => 1 
) 

如果我打印的客戶會話:

Mage::getSingleton('customer/session')->getData(); 

這個收益(精確的輸出):

 array(
[_session_validator_data] => Array 
     (
      [remote_addr] => 58.65.183.10 
      [http_via] => 
      [http_x_forwarded_for] => 58.65.183.10 
      [http_user_agent] => Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 
     ) 

    [session_hosts] => Array 
      (
       [bestevalue.info] => 1 
      ) 
    [messages] => Mage_Core_Model_Message_Collection Object 
      (
       [_messages:protected] => Array 
        (
        ) 

       [_lastAddedMessage:protected] => 
      ) 
    [id] => 
) 

我是e在這裏xhausted,我登錄,可以看到客戶儀表板上的客戶信息,但不能在我的自定義模塊中使用該會話,請指導我如何解決這個問題。

更新:

我/app/etc/local.xml該會話類型已經檢查是文件

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

那麼有沒有用php提取會話信息的不同方法?我究竟做錯了什麼?

更新2:

我用的路由器,以及做出漂亮的URL public function match(Zend_Controller_Request_Http $request)

對這一行動的開始,我把

Mage::getSingleton('core/session', array('name' => 'frontend'));

,但仍無法與工作路由器沒有一個它正在工作,例如直接訪問行動:

site.com/module/controller/action

它的工作原理,但不與路由器。有什麼想法嗎? 感謝,

+0

同樣的事情,如果你打印法師:: getSingleton( '客戶/會話') - > getCustomer() - > getData()? – JNDPNT 2013-05-10 09:31:24

+0

是這樣做的輸出:陣列 ( [website_id] => 1 ) – 2013-05-10 09:33:29

+0

那麼會議肯定還沒有被填補。你在哪裏打電話會議(這個代碼位於哪裏)?您是否100%確定您已登錄? – JNDPNT 2013-05-10 09:36:49

回答

2

解決方法很簡單:

private function _getCustomerSession() { 
    Mage::getSingleton('core/session', array('name' => 'frontend')); 
    return Mage::getSingleton('customer/session'); 
} 

此初始化會話並將其返回。像這樣調用這個函數:

$this->_getCustomerSession()->getCustomer() 

它將有可用的數據。

googlers和將來的參考更新:我今天再次遇到這個問題,我自己的解決方案沒有工作(如問題)。進一步調查發現我已經覆蓋了我的自定義模塊中的preDispatch()函數,以檢查該模塊是否在後端啓用,並且如果沒有重定向到有錯誤的主頁。在這種情況下,解決方案很明顯地稱爲parent::preDispatch();

+0

感謝您的答案,我已經把這個在我的控制器類,並按照你所說的調用方法,但這隻會導致'Mage_Customer_Model_Customer對象'與'[_data:保護] =>陣列 ( [website_id] => 1 )' – 2013-05-10 09:59:57

+0

奇怪的是,我在我的測試(只有website_id)有同樣的事情,這有助於......但現在我似乎無法重現這一點。你是在預調度功能還是在控制器功能中調用它? – JNDPNT 2013-05-10 10:12:47

+0

對我來說這是一個意想不到的情況(磨牙)我只在我的控制器功能中打電話。 – 2013-05-10 10:14:46

0

對此的答案是最有可能是您爲自定義模塊操作擴展的控制器不是正確的類。 我也只是有同樣的問題,撲我的頭,我意識到在屏幕上的一個小時左右後,我的控制器延長該

Mage_Core_Controller_Varien_Action 

,而不是這個

Mage_Core_Controller_Front_Action 

我不知道沒有進入這些主要區別是什麼,但我知道你不會有一個客戶會議延長頭等艙!

0

我受不了我的自定義模塊中的客戶會話。它在我的localhost工作正常,但在服務器我無法獲得客戶會話。

我已經在config.xml中更換frontname找到了解決辦法,

我剛纔改變<frontName>votingsytem</frontName> to <frontName>vote</frontName>

我得到了客戶的會話它活的服務器正常工作。

我希望這會有用。

前:

<frontend> 
    <routers> 
    <votingsytem> 
     <use>standard</use> 
     <args> 
      <module>Vgs_Votingsytem</module> 
      <frontName>votingsytem</frontName> 
     </args> 
    </votingsytem>   
    </routers> 
    <layout> 
    <updates> 
     <votingsytem> 
      <file>votingsytem.xml</file> 
     </votingsytem> 
    </updates> 
    </layout> 

後:

<frontend> 
    <routers> 
    <votingsytem> 
     <use>standard</use> 
     <args> 
      <module>Vgs_Votingsytem</module> 
      <frontName>vote</frontName> 
     </args> 
    </votingsytem>   
    </routers> 
    <layout> 
    <updates> 
     <votingsytem> 
      <file>votingsytem.xml</file> 
     </votingsytem> 
    </updates> 
    </layout>