拉入Magento会话信息是错误的

时间:2010-07-16 06:00:14

标签: magento

我使用以下代码结构在自定义页面上提取Magento会话信息:

require_once ( "../app/Mage.php" );
umask(0);
Mage::app("default");

Mage::getSingleton("core/session", array("name" => "frontend"));
$session = Mage::getSingleton("customer/session"); 
$test = array();
//print_r($session);

if($session->isLoggedIn()){
    Set some session variables
} //end session check

else {
    //They don't belong here.  Transfer them to a login page
    header("Location: http://www.mydomain.com/customer/account/login/");
} 

它在大多数情况下都很有效,但有时它似乎不会引入会话信息。我的print_r看起来像这样:

Mage_Customer_Model_Session Object
(
    [_customer:protected] => 
    [_isCustomerIdChecked:protected] => 
    [_skipSessionIdFlag:protected] => 
    [_data:protected] => Array
        (
            [_session_validator_data] => Array
            (
                    [remote_addr] => an.ip.addr.ess
                    [http_via] => 
                    [http_x_forwarded_for] => 
                    [http_user_agent] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 ( .NET CLR 3.5.30729)
                )

        [session_hosts] => Array
            (
                [www.mydomain.com] => 1
            )

    )

[_origData:protected] => 
[_idFieldName:protected] => 
[_isDeleted:protected] => 
)

但如果我保留标题:位置标记,它会将我带到帐户页面,因为我已登录。

还有其他人经历过这个吗?我该如何避免呢?我很难过。

4 个答案:

答案 0 :(得分:1)

我不知道您使用标头的原因,但尝试使用此代码

require_once ( "../app/Mage.php" );
umask(0);
Mage::app("default");

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

if($session->isLoggedIn()){
   var_dump($session->getData());
}

答案 1 :(得分:1)

我遇到了同样的问题,直到我意识到我在拉取Magento会话信息之前为自定义页面启动了一个新会话。当我颠倒过程时,它工作正常。

答案 2 :(得分:0)

我遇到了同样的问题,然后我将Mage::app("default");更改为Mage::app();,它似乎就像魅力一样。

答案 3 :(得分:0)

In my case,事实证明该文件的位置产生了很大的不同。我基本上尝试了上面的Kapil代码,不同之处在于我将文件放在magento root中。

我想添加两点信息;希望这可能会回答你的问题。

编辑: 我使用的代码类似于Kapil。如果您的自定义页面位于单独的子域中,那么您可能需要在Magento Admin中正确设置Cookie域(请阅读对此的评论:How to access Magento customer's session from outside Magento?