php - Magento: पता लगाएँ कि व्यवस्थापक फ्रंट पेज में व्यवस्थापक लॉग इन है या नहीं




magento-1.7 administration (8)

Adminhtml कुकी से सत्र आईडी खींचने की कोशिश करने के अलावा, जो आईएमएचओ काम कर सकता है या नहीं कर सकता है, केवल "त्वचा" पृष्ठ के लिए बेहतर है, आपको इसके सामने की तरह दिखने और व्यवस्थापक नियंत्रक का उपयोग करने के लिए दिखाने की ज़रूरत है ताकि यह व्यवस्थापक सत्र के तहत चलाए जा सके।

एक और समाधान है कि ग्राहक को व्यवस्थापक से "प्रतिलिपि" करें और अपने पृष्ठ पर क्लिक करने से पहले उन्हें लॉग इन करें और फिर यह जांचने की बात है कि ग्राहक में लॉग इन किया गया है, तो कुछ समूह का सदस्य है।

मैंने एक Magento एक्सटेंशन बनाया है। मैं विस्तार तक पहुंच को कार्यान्वित करना चाहता हूं। एक्सटेंशन फ्रंट पेज में एक पेज बनाता है और मैं केवल उस पृष्ठ तक पहुंचने के लिए व्यवस्थापक चाहता हूं। तो मूल रूप से मुझे ऐसा कुछ चाहिए जो यह पता लगाएगा कि यदि व्यवस्थापक फ्रंट पेजों में लॉग इन है।

मैंने कई समाधानों की कोशिश की है लेकिन काम करना प्रतीत होता है।

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

यदि व्यवस्थापक लॉग इन है तो फ्रंटएंड पर जांचें

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

उपयोग करने में सक्षम होने की कुंजी:

// Ensure we're in the admin session namespace for checking the admin user..
Mage::getSingleton('core/session', array('name' => 'adminhtml'))->start();

$admin_logged_in = Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->isLoggedIn();

// ..get back to the original.
Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace))->start();

यह है कि controller को extends Mage_Adminhtml_Controller_Action को extends Mage_Adminhtml_Controller_Action करना होगा

आप इस कोड का उपयोग preDispatch फ़ंक्शन में कर सकते हैं।

और अपने config.xml के admin अनुभाग में इस नियंत्रक के लिए routers सेट करें।


एलन तूफान द्वारा लिखित एक नया Magento मॉड्यूल है: https://github.com/astorm/Magento_CrossAreaSessions सत्र

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

$adminUser = $dataAdminhtml['admin']['user'];
$loggedIn = $adminUser->getId() && $adminUser->getIsActive();

क्रिस्टोफ पीटर्स ने एक लिंक पोस्ट किया जिसने मेरी समस्या हल की (पता लगाएं कि व्यवस्थापक फ्रंट पेजों में लॉग इन है या नहीं):

//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'
   }
}

क्रिस्टोफ पीटर्स बहुत बहुत धन्यवाद!


यदि आप सेमी रेडिस सत्र का उपयोग कर रहे हैं तो इसे आजमाएं: (मेरे लिए काम किया)

$sesId = isset($_COOKIE['adminhtml']) ? $_COOKIE['adminhtml'] : false ;
if($sesId){
    $session = Mage::getSingleton('core_mysql4/session')->read($sesId);
}
$loggedIn = false;
if($session)
{
    if(stristr($session,'Mage_Admin_Model_User'))
    {
        $loggedIn = true;
    }
}

var_dump($loggedIn);

क्योंकि यदि आप सेमी रेडिस का उपयोग कर रहे हैं तो इसके अपने मॉडल के साथ डीबी सत्र मॉड्यूल को फिर से लिखना है।


यह काफी सरल है लेकिन एक अनुशंसित समाधान नहीं है। मैं खुद ऐसा करने के लिए घंटों की संख्या बिताता हूं। के लिए, विंडोज आधारित सर्वर समाधान के नीचे प्रयास करें:

$sessionFilePath = Mage::getBaseDir('session').DS.'sess_'.$_COOKIE['adminhtml'];
$sessionFile     = file_get_contents($sessionFilePath); 
$exp_cookie   = explode(';',$sessionFile);
if(count($exp_cookie)   >   100)
{
  return "login";
}
return "expire";    

के लिए, लिनक्स आधारित सर्वर समाधान के नीचे प्रयास करें:

$sessionFilePath = Mage::getBaseDir('session').DS.'sess_'.$_COOKIE['adminhtml'];
$sessionFile     = file_get_contents($sessionFilePath); 
$exp_cookie   = explode('--',$sessionFile)
if(count($exp_cookie)   >   10)
{
  return "login";
}
return "expire";

धन्यवाद, काशीफ


यहां एक समाधान है जो यह Magento 1.7.0.2 (परीक्षण) और प्रत्येक फ्रंटेंड साइट पर काम करता है, मैं इसे एक नियंत्रक में उपयोग करता हूं जो Mage_Adminhtml_Controller_Action से विस्तार नहीं कर रहा है।

https://peters-christoph.de/tutorials/magento-pruefe-admin-session-logi-im-frontend/


इस ब्लॉग को जांचें, मुझे लगता है कि आपको isLoggedIn() से जांचने से पहले start() से जांचना नहीं है।

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";
    }