我使用以下代码结构在自定义页面上提取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] =>
)
但如果我保留标题:位置标记,它会将我带到帐户页面,因为我已登录。
还有其他人经历过这个吗?我该如何避免呢?我很难过。
答案 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?)