Limit czasu sesji backendu Magento 2

53

W Magento 1.x limit czasu sesji backend został ustawiony przez:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

Początkowo moim pytaniem było, jak to ustawić w Magento 2.0, ale najwyraźniej istnieją różnice między Magento 2.0 i Magento 2.1

W przypadku Magento 2.0: Arkadii Chyzhov wskazał, jak to ustawić (patrz poniżej).

W przypadku Magento 2.1: fschmengler zaproponował rozwiązanie (patrz poniżej).

Wydaje się jednak, że M 2.1 nie zapewnia prostego rozwiązania poprzez backend. Czy ktoś może wymyślić dodatkowe rozwiązanie dla M 2.1?

Els den Iep
źródło

Odpowiedzi:

82

Sklepy> Ustawienia> Konfiguracja> Zaawansowane> Administrator> Bezpieczeństwo> Czas trwania sesji administratora (sekundy)

Istnieje również możliwość ustawienia tego parametru bezpośrednio w bazie danych, wystarczy wpisać wartość pod ścieżkę

admin / security / session_lifetime

w tabeli core_config_data

Aktualizacja

Magento 2.1 admin cookie cookie life time = Sklepy> Ustawienia> Konfiguracja> Zaawansowane> Administrator> Bezpieczeństwo> Czas trwania sesji administratora (sekundy) lub do momentu zamknięcia przeglądarki przez użytkownika

Ponieważ Magento 2.1 wprowadza okres istnienia administracyjnego pliku cookie, ponieważ „wygasa po zamknięciu przeglądarki”, wraz z wartością w Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds). Oznacza to, że czas życia sesji jest równy wartości w Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)lub przy zamkniętej przeglądarce.

Możesz też ustawić nową wartość administracyjnego pliku cookie, tak jak zaproponowano to w odpowiedzi fschmenglera

Arkadii Chyzhov
źródło
czy byłbyś zainteresowany dostosowaniem funkcjonalności nawigacji warstwowej na naszej stronie M2?
Els den Iep
@ElsdenIep pls. znajdę moje dane kontaktowe w profilu
Arkadii Chyzhov
Czy wiesz, jaka jest kolumna w bazie danych dla tej wartości, więc mogę ją zmienić programowo?
jojman
Ustawiłem
@ArkadiiChyzhov patrz moja odpowiedź poniżej :)
OZZIE
16

Sprawdź zrzut ekranu dołączonego obrazu, aby lepiej zrozumieć proces administratora.

Przejdź do Sklepy-> Ustawienia-> Konfiguracja-> Zaawansowane-> Administrator-> Bezpieczeństwo-> Czas życia sesji administratora (sekundy)

I sprawdź zrzut ekranu. wprowadź opis zdjęcia tutaj

Yogesh Trivedi
źródło
10

Rozwiązanie dla Magento 2.1+

Od Magento 2.1 czas trwania sesji administratora to zawsze „sesja”, tj. Do czasu zamknięcia przeglądarki. Tobył mógł zostać wprowadzony ze względów bezpieczeństwa.

Odpowiedni kod znajduje się w Magento\Backend\Model\Session\AdminConfig:

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

Jeśli chcesz zmienić to zachowanie, możesz dodać wtyczkę do tej klasy za pomocą następującej metody przechwytywacza:

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

Gdzie $this->scopeConfigpowinna być instancja \Magento\Framework\App\Config\ScopeConfigInterface, wstrzykiwana przez parametr konstruktora.

W ten sposób czas życia pliku cookie jest wykorzystywany z konfiguracji, podobnie jak w interfejsie użytkownika.

Pamiętaj, że konfiguracja w Sklepach> Konfiguracja> Zaawansowane> Bezpieczeństwo administratora> Czas życia sesji nie ma już wpływu na pliki cookie! Służy do określania czasu życia sesji Redis, więc jeśli wydłużysz czas życia ciasteczka, powinieneś również zwiększyć tę wartość.

Fabian Schmengler
źródło
Zastanawiam się, czy mógłbyś wyjaśnić ten powód bezpieczeństwa. Z mojego punktu widzenia ustawienie czasu życia cookie administratora na 0 powoduje rozbieżność i nieoczywiste zachowanie, jeśli korzystamy z opcji „admin / security / session_lifetime”, która określa czas życia sesji administratora i która pośrednio zależy od 2.1.
Arkadii Chyzhov
1
Zakładałem, że ma to zapobiec przypadkowi, gdy administrator zamyka okno bez „wylogowania”, a każda osoba uzyskująca dostęp do tego samego komputera jest już zalogowana. Nie jest to poważne zagrożenie i zgadzam się z tobą, że to zła decyzja aby ta „funkcja” była nieoczywista.
Fabian Schmengler,
Ale szukałem teraz odpowiedzialnego zatwierdzenia i znalazłem to: github.com/magento/magento2/commit/... „MAGETWO-49092: Nieprawidłowy klucz formularza na stronie logowania administratora” - to bardziej przypomina obejście, które pozwala ukryć kolejny błąd lub mniej przypadkowy i co najmniej nieudokumentowany efekt uboczny.
Fabian Schmengler,
Musi być więcej, ponieważ moja sesja wciąż wygasa bez zamykania przeglądarki.
Matt Cosentino
1
@Volvox przyjrzyj się uważnie: wtyczka jest setCookieLifetime, publiczna metoda z parametrami
Fabian Schmengler
6

Uwaga: zaakceptowana odpowiedź działa, jednak magento 2 używa domyślnego folderu php do przechowywania plików sesji, jeśli skonfigurowano to w php:

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

to jest dodawane do crona systemowego przez instalację php.

Więc możesz albo

  • wyłącz tego crona
  • lub lepiej: wzrost gc_maxlifetimephp.ini (ponieważ będzie to górny limit)
OZZIE
źródło
2

Innym rozwiązaniem bez modyfikacji jakichkolwiek ustawień jest zainstalowanie dowolnego auto refresh addondla przeglądarki i ustawienie jego czasu (60 sekund).

Będzie automatycznie odświeżać stronę co 6o sekund, co zapobiega wygaśnięciu żywotności sesji i możemy rozpocząć pracę nad inną kartą.

Użyłem Easy Auto Refreshi działa dobrze dla mnie.

Amit Singh
źródło
nie bądź głupi z takimi „rozwiązaniami”. jest to całkowicie niedopuszczalne.
sellio
2

Jeśli używasz wielu maszyn wirtualnych / serwerów dla sieci i bazy danych, a czas nie jest zsynchronizowany, również spowodował problem.

Więc jeśli wszystkie powyższe opcje nie działają, sprawdź znacznik czasu / datę dwóch serwerów, jeśli używasz wielu serwerów dla sieci i db.

Aunik Rahman
źródło
1

Nie wiem dlaczego, ale dla niektórych z nas ustawienie czasu życia sesji administracyjnej z backendu nie działa, więc znalazłem kilka rozwiązań:

  1. W php.ini zmień session.gc_maxlifetime z 1440 na dowolną pożądaną liczbę sekund. (To rozwiązanie działało dla mnie, przetestowane na Magento 2.2.0 i 2.2.1)

  2. W .htaccess dodaj „php_value session.gc_maxlifetime 28800” lub dowolną liczbę sekund, którą chcesz.

  3. Przez ręczne ustawienie czasu życia. Przejdź do dostawcy / magento / module-encryption-key / etc / config.xml i zmień z 900 na dowolną liczbę sekund.

Mam nadzieję, że jedno z tych rozwiązań będzie działać również dla innych.

Sylaratty
źródło