我有一个安装了 Magento 1.4.0.1 的 Web 服务器。我有另一个与之共享凭据的网站。我已经设法检查客户是否登录(在更改 Magento 中的 cookie 位置之后),但是当我还尝试确定管理员是否登录时,事情变得复杂。我只能得到正确的答案对于我要求的第一个会话(无论是客户还是管理员,第二个会话从未登录)。
我怎样才能得到两个答案?
这是我用来测试的代码:
require_once '../app/Mage.php';
umask(0) ;
Mage::app();
// Checking for customer session
Mage::getSingleton('core/session', array('name'=>'frontend') );
$session=Mage::getSingleton('customer/session', array('name'=>'frontend') );
if ($session->isLoggedIn()) {
echo "Customer is logged in";
} else {
echo "Customer is not logged in";
}
// Checking for admin session
Mage::getSingleton('core/session', array('name'=>'adminhtml') );
$adminsession = Mage::getSingleton('admin/session', array('name'=>'adminhtml'));
if($adminsession->isLoggedIn()) {
echo "Admin Logged in";
} else {
echo "Admin NOT logged in";
}
因此,使用这样的代码,管理员永远不会登录。如果您首先放置有关管理员的部分,那么客户永远不会登录。看起来我在两个请求之间缺少一行。
这可能与这个未回答的问题是同一问题:Magento如何检查管理员是否在模块控制器中登录 https://stackoverflow.com/questions/3342165/magento-how-to-check-if-admin-is-logged-in-within-a-module-controller
这似乎是一个普遍的问题,但我找不到正确的解决方案......
感谢您的帮助!
我从另一个角度发现了“错误功能”(尝试从管理端登录客户),但仍然找到了原因。
问题出在 session_name() 函数上。如果您转到 Mage_Core_Model_Session_Abstract_Varien,您会看到会话对象正在使用标准 PHP 会话函数,并且 PHP 无法同时处理两个会话。
管理端的会话 ID 存储在 cookie adminhtml 中,而客户端的会话 ID 存储在前端 cookie 中。然后在 adminside 中,您拥有由 adminhtml cookie 初始化的会话 ID。在管理端时,您的客户/会话对象存储在 PHP 会话内的 $_SESSION['customer'] (尚未检查确切的密钥)之类的内容中,以获取存储在 adminhtml cookie 中的 ID。这意味着在 magento 的管理部分和客户端部分中,客户/会话对象指的是不同的会话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)