7
votes

Magento - vérifier si un administrateur et un client sont connectés

J'ai un serveur Web avec Magento 1.4.0.1 installé. J'ai un autre site Web qui partage les diplômes avec cela. J'ai réussi à vérifier si le client est connecté ou non (après avoir modifié l'emplacement des cookies à Magento), mais les choses ont été compliquées lorsque j'ai également essayé de comprendre si un administrateur était connecté. Je ne peux que recevoir la bonne réponse. Pour la première session, j'ai demandé (le client ou l'administrateur, le second n'est jamais connecté).

Comment puis-je avoir les deux réponses?

Voici le code que j'utilise pour tester cela: xxx

donc avec le code comme celui-ci, l'administrateur n'est jamais connecté. Si Vous mettez la partie à propos de l'administrateur en premier, puis le client n'est jamais connecté. Il semble que je manque une ligne entre les deux demandes.

Cela peut être le même problème que cette question sans réponse: < un href = "https://stackoverflow.com/questions/3342165/magento-how-a-check-if-admin-is-logged-in-within-a-module-controller"> Magento Comment vérifier si l'administrateur est Connecté dans un contrôleur de module

Ceci semble être un problème populaire, mais je n'ai pas pu trouver la solution appropriée ...

Merci pour votre aide!


1 commentaires

Le poste qui était le plus proche d'une réponse était celui-ci MagentOcommerce.com/boards/viewthread / 50307 / # T274955 mais je ne pouvais pas le faire fonctionner. Un autre message dans le même thread discute de la séparation des deux vérifications en différents fichiers PHP, mais créant la classe avec la fonction que j'ai appelée produisait les mêmes résultats ...


5 Réponses :


0
votes

Voici ce que j'utilise ..

Mage::getSingleton('core/session', array('name'=>'adminhtml'));
$session = Mage::getSingleton('admin/session');;
if (!$session->getUser())
{
    die("You aren't an admin!"); 
}


1 commentaires

Merci, mais dans mon cas, les deux utilisateurs ne sont pas les mêmes (nous avons séparé admin et compte client). J'ai donc toujours le même problème: il n'y a rien dans GetUserer () lorsque la session d'administrateur est vérifiée après la session du client.



4
votes

J'ai trouvé cette "fonctionnalité de bug" d'un autre angle de vue (essayer de vous connecter au client d'administrateur), mais j'ai toujours trouvé la cause.

Le problème est avec la fonction Session_Name (). Si vous allez à mage_core_model_session_abstract_varien, vous verrez là que l'objet de session utilise des fonctions de session Standart PHP et PHP ne peut pas gérer deux sessions en même temps.

Votre identifiant de session pour Adminside est stocké dans Cookie AdminHTML, tandis que pour Clientide, votre identifiant de session est dans Frontend Cookie. Ensuite, dans Adminside, vous avez initialement initialisé par AdminHTML Cookie. Lorsque dans Adminside, votre objet client / session est stocké à l'intérieur de quelque chose comme $ _session ['client'] (n'a pas vérifié la clé exacte) à l'intérieur de la session PHP pour ID stockée dans AdminHTML Cookie. Cela signifie que l'objet client / session se réfère à des sessions différentes lorsque l'administrateur et les parties client de Magento.


2 commentaires

Salut zebooka! Merci pour votre explication! Je l'ai lu plusieurs fois maintenant, mais mon cerveau ne le fait pas pour le contourner! Je reçois que ce client et admin utilise un cookie différent. Je reçois que PHP ne reconnaît qu'une session à l'époque. Maintenant, la pièce n'est pas sûre, c'est sur la question de savoir si je pouvais ou non creuser le $ _Session pour trouver l'objet client du côté administrateur et comment le faire. J'ai imprimé le $ _session et c'est un énorme tableau .. sans clé "client". J'ai comparé le contenu lorsqu'un client est connecté et non, mais aucune différence ne se pose ...


Vous n'avez qu'une session dans PHP. Magento utilise différents cookies (adminhtml et frontend) pour le côté administrateur et le côté du client. Les modèles Admin / Session et Customer / Session sont enregistrés à l'intérieur de $ _Session avec des clés de tableau (dis admin et client). Mais le tableau $ _SESSION est différent lorsque vous êtes au côté de l'administrateur et au client, car vous avez des identifiants de session différents dans différents cookies de session (AdminhTML et Frontend). Le seul moyen d'accéder à la session frontale consiste à obtenir du contenu frontal de cookie et de charger manuellement le modèle client / session avec des contenus de var / session / sess_sessionid.



2
votes

Ce que vous devez faire est de changer les données de session. Vous pouvez le faire avec le code suivant:

$switchSessionName = 'adminhtml';
$currentSessionId = Mage::getSingleton('core/session')->getSessionId();
$currentSessionName = Mage::getSingleton('core/session')->getSessionName();
if ($currentSessionId && $currentSessionName && isset($_COOKIE[$currentSessionName])) {
    $switchSessionId = $_COOKIE[$switchSessionName];
    $this->_switchSession($switchSessionName, $switchSessionId);
    $whateverData = Mage::getModel('mymodule/session')->getWhateverData();
    $this->_switchSession($currentSessionName, $currentSessionId);
}

protected function _switchSession($namespace, $id = null) {
    session_write_close();
    $GLOBALS['_SESSION'] = null;
    $session = Mage::getSingleton('core/session');
    if ($id) {
        $session->setSessionId($id);
    }
    $session->start($namespace);
}


0 commentaires

-2
votes

Voici un script simple pour vérifier l'administrateur est enregistré ou non et si connecté Obtenez des détails d'administration de Magento.Vous pouvez appeler à la session et à l'appel à la fonction utilisateur pour obtenir tous les détails.

$userDetails = Mage::getSingleton('admin/session');    // Get data from the session
$userID      = $userDetails->getUser()->getUserId();   // Get user ID
$userID      = $userDetails->getUser()->getEmail();   // Get user Email


1 commentaires

C'est la plupart des mêmes réponses que Dalton, cela ne résout pas le problème de la session de commutation.



0
votes

C'est assez simple mais pas une solution recommandée. Je passe moi-même nombre d'heures à faire cela. Pour, serveur basé sur Windows Essayez la solution ci-dessous:

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


0 commentaires