Délai d'expiration de la session backend de Magento 2

53

Dans Magento 1.x, le délai d'expiration de la session principale était défini via:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

Au départ, ma question était de savoir comment définir cela dans Magento 2.0, mais apparemment, il existe des différences entre Magento 2.0 et Magento 2.1.

Pour Magento 2.0: Arkadii Chyzhov a expliqué comment régler cela (voir ci-dessous).

Pour Magento 2.1: fschmengler a suggéré une solution (voir ci-dessous).

Cependant, M 2.1 ne semble pas fournir de solution simple via le backend. Quelqu'un peut-il proposer une solution supplémentaire pour M 2.1?

Els den Iep
la source

Réponses:

82

Magasins> Paramètres> Configuration> Avancé> Admin> Sécurité> Durée de vie de la session d’administrateur (secondes)

Il est également possible de définir ce paramètre directement sur la base de données, il suffit de mettre une valeur sous path

admin / security / session_lifetime

dans la table core_config_data

Mise à jour

Durée de vie du cookie d'administrateur Magento 2.1 = Magasins> Paramètres> Configuration> Avancé> Admin> Sécurité> Durée de vie de la session d'administrateur (secondes) ou jusqu'à ce que l'utilisateur ferme le navigateur

Depuis Magento 2.1 introduit la durée de vie du cookie administrateur sous la forme "expire à la fermeture du navigateur", ainsi que la valeur dans Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds). Cela signifie que la durée de vie de la session est égale à la valeur dans Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)ou lorsqu'un navigateur est fermé.

Ou vous pouvez configurer une nouvelle valeur pour le cookie administratif, comme cela est proposé dans la réponse de fschmengler

Arkadii Chyzhov
la source
Seriez-vous intéressé à ajuster les fonctionnalités de la navigation par couches sur notre site Web M2?
Els den Iep
@ElsdenIep pls. trouver mes coordonnées dans le profil
Arkadii Chyzhov
Savez-vous quelle est la colonne dans la base de données pour cette valeur afin que je puisse la modifier par programme?
jojman
Je l'ai réglé sur 50400, mais il se déconnecte toujours au bout de 20 minutes environ.
OZZIE
@ArkadiiChyzhov voir ma réponse ci-dessous :)
OZZIE
16

Vérifiez l'image ci-jointe pour une meilleure compréhension du processus d'administration.

Allez dans Magasins-> Paramètres-> Configuration-> Avancé-> Admin-> Sécurité-> Durée de vie de la session d'administrateur (secondes)

Et vérifiez la capture d'écran. entrez la description de l'image ici

Yogesh Trivedi
la source
10

Solution pour Magento 2.1+

Depuis Magento 2.1, la durée de vie d'une session d'administrateur est toujours "session", c'est-à-dire jusqu'à ce que le navigateur soit fermé. Cettea été aurait pu être introduit pour des raisons de sécurité.

Le code correspondant est en Magento\Backend\Model\Session\AdminConfig:

/**
 * Set session cookie lifetime to session duration
 *
 * @return $this
 */
protected function configureCookieLifetime()
{
    return $this->setCookieLifetime(0);
}

Si vous souhaitez modifier ce comportement, vous pouvez ajouter un plugin pour cette classe avec la méthode d'intercepteur suivante:

public function beforeSetCookieLifetime()
{
    $lifetime = $this->scopeConfig->getValue(
        \Magento\Framework\Session\Config::XML_PATH_COOKIE_LIFETIME,
        \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT);
    return [$lifetime, \Magento\Framework\Session\Config::COOKIE_LIFETIME_DEFAULT];
}

$this->scopeConfigdevrait être une instance de \Magento\Framework\App\Config\ScopeConfigInterface, injecté via le paramètre constructeur.

De cette façon, la durée de vie des cookies est utilisée à partir de la configuration, tout comme dans l'interface frontale.

Notez que la configuration dans Magasins> Configuration> Avancée> Sécurité admin> Session Lifetime n’a plus d’effet sur les cookies! Il est utilisé pour déterminer la durée de vie de la session Redis. Par conséquent, si vous augmentez la durée de vie des cookies, vous devez également augmenter cette valeur.

Fabian Schmengler
la source
Je me demande si vous pourriez expliquer cette raison de sécurité. De mon point de vue, définir la durée de vie du cookie administrateur sur 0 entraîne un écart et un comportement peu évident si nous utilisons 'admin / security / session_lifetime', qui définit la durée de vie de la session admin et qui dépend implicitement de la durée de vie du cookie 2.1.
Arkadii Chyzhov
1
J'ai supposé que c'était pour éviter qu'un administrateur ferme la fenêtre sans "déconnexion" et que toute personne ayant accès au même ordinateur soit déjà connectée. Ce n'est pas une menace majeure et je conviens avec vous que c'est une mauvaise décision. pour rendre cette "fonctionnalité" cette non évidente.
Fabian Schmengler
Mais j’ai recherché le commit responsable et j’ai trouvé ceci: github.com/magento/magento2/commit/… "MAGETWO-49092: Clé de formulaire non valide sur la page de connexion Admin" - cela ressemble plus à une solution de contournement pour masquer un autre bogue avec plus ou un effet secondaire moins accidentel et au moins non documenté.
Fabian Schmengler
Il doit y avoir plus de choses, car ma session expire toujours sans fermer mon navigateur.
Matt Cosentino
1
@Volvox regarde attentivement: le plugin est pour setCookieLifetime, une méthode publique avec des paramètres
Fabian Schmengler
6

Une note ici, la réponse acceptée fonctionne cependant magento 2 utilise le dossier php par défaut pour stocker les fichiers de session, si vous l'avez configuré en php:

09,39 *     * * *     root   [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean

alors ceci est ajouté au système cron par l'installation php.

Alors vous pouvez soit

  • désactiver ce cron
  • ou mieux: augmentation gc_maxlifetimedu php.ini (car ce sera la limite supérieure)
Ozie
la source
2

Une autre solution, sans modifier aucun paramètre, consiste à installer any auto refresh addonpour votre navigateur et à définir son temps (60 secondes).

Il actualisera automatiquement la page toutes les 60 secondes, ce qui empêchera la durée de vie d'une session et nous pourrons commencer à travailler sur un autre onglet.

Je l'ai utilisé Easy Auto Refreshet ça marche bien pour moi.

Amit Singh
la source
ne soyez pas stupide avec de telles "solutions". c'est totalement inacceptable.
Sellio
2

Si vous utilisez plusieurs ordinateurs virtuels / serveurs pour le Web et la base de données et que l'heure n'est pas synchronisée, le problème est également à l'origine du problème.

Donc, si toutes les options ci-dessus ne fonctionnent pas, vérifiez l'horodatage / la date des deux serveurs lorsque vous utilisez plusieurs serveurs pour le Web et la base de données.

Aunik Rahman
la source
1

Je ne sais pas pourquoi, mais pour certains d'entre nous, configurer la session d'administration à vie à partir du backend ne fonctionne pas, j'ai donc trouvé deux solutions:

  1. Dans php.ini, changez session.gc_maxlifetime de 1440 au nombre de secondes souhaité. (Cette solution a fonctionné pour moi, testée sur magento 2.2.0 et 2.2.1)

  2. Dans .htaccess, ajoutez "php_value session.gc_maxlifetime 28800" ou le nombre de secondes souhaité.

  3. En définissant manuellement la durée de vie. Accédez à vendor / magento / module-encryption-key / etc / config.xml et passez du nombre 900 au nombre de secondes souhaité.

J'espère qu'une de ces solutions fonctionnera pour les autres aussi.

Sylaratty
la source