Magento:检测管理员是否在前端页面中登录

Nir*_*Ram 24 php administration magento magento-1.7

我创建了一个magento扩展.我想实现对扩展的访问.该扩展程序在前端创建一个页面,我只希望管理员访问该页面.所以基本上我需要能够检测到管理员是否在前端页面登录的东西.

我已经尝试了几种解决方案,但注意似乎有效.

if(Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->isLoggedIn()) echo 'logged in'; else echo 'not logged in';
Run Code Online (Sandbox Code Playgroud)

如果管理员已登录,请检查前端

Mage::getSingleton('core/session', array('name'=>'adminhtml'));
$adminSession = Mage::getSingleton('admin/session');
$adminSession->start();
if ($adminSession->isLoggedIn()) {
   echo 'logged in';
}
Run Code Online (Sandbox Code Playgroud)

Mea*_*bed 13

以上解决方案不起作用!

这是一个有效的解决方案(它不是那么干净!但是这可以在你的应用程序的任何地方使用phtml视图或模型或控制器或助手!)

$sesId = isset($_COOKIE['adminhtml']) ? $_COOKIE['adminhtml'] : false ;
$session = false;
if($sesId){
    $session = Mage::getSingleton('core/resource_session')->read($sesId);
}
$loggedIn = false;
if($session)
{
    if(stristr($session,'Mage_Admin_Model_User'))
    {
        $loggedIn = true;
    }
}
var_dump($loggedIn);// this will be true if admin logged in and false if not
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于基于数据库的会话,不适用于基于文件的会话(PHP默认)或其他会话后端(如memcache). (7认同)
  • 很奇怪,对我来说根本不起作用,无论如何报道都是假的(v 1.7.0.2) (2认同)
  • 最好使用session_decode($ session); if(Mage :: getSingleton('admin / session')-> isLoggedIn())...而不是if(stristr($ session,'Mage_Admin_Model_User'))...。这样,您实际上是在解码会话信息,而不是依赖于可能注入到会话数据中的字符串。 (2认同)

Kev*_*vin 7

有一个新的magento模块,由alan storm编写:https://github.com/astorm/Magento_CrossAreaSessions

$adminhtml  = Mage::getModel('pulsestorm_crossareasession/manager')->getSessionData('adminhtml');

$adminUser = $dataAdminhtml['admin']['user'];
$loggedIn = $adminUser->getId() && $adminUser->getIsActive();
Run Code Online (Sandbox Code Playgroud)


小智 5

Christoph Peters发布了一个链接,该链接解决了我的问题(如果在前端页面中登录了admin,请检测):

//check if adminhtml cookie is set
if(array_key_exists('adminhtml', $_COOKIE)){
   //get session path and add dir seperator and content field of cookie as data name with magento "sess_" prefix
   $sessionFilePath = Mage::getBaseDir('session').DS.'sess_'.$_COOKIE['adminhtml'];
   //write content of file in var
   $sessionFile = file_get_contents($sessionFilePath);

   //save old session
   $oldSession = $_SESSION;
   //decode adminhtml session
   session_decode($sessionFile);
   //save session data from $_SESSION
   $adminSessionData = $_SESSION;
   //set old session back to current session
   $_SESSION = $oldSession;

   if(array_key_exists('user', $adminSessionData['admin'])){
      //save Mage_Admin_Model_User object in var
      $adminUserObj = $adminSessionData['admin']['user'];
      echo 'ADMIN USER IS LOGGED IN';
   }
   else
   {
      echo 'ADMIN USER IS NOT LOGGED IN'
   }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢Christoph Peters!


Vis*_*nku -1

检查这个博客start(),我想你不需要在检查之前检查isLoggedIn()

Mage::getSingleton('core/session', array('name'=>'adminhtml')); // get sessions

$check = Mage::getSingleton('admin/session', array('name'=>'adminhtml')); //get admin sessions

    if($check->isLoggedIn()) { //check is admin logged in
        echo "Admin is logged in";
    } else {
        echo "Admin is offline";
    }
Run Code Online (Sandbox Code Playgroud)