Tiempo de espera de sesión de back-end de Magento 2

53

En Magento 1.x, el tiempo de espera de la sesión de back-end se estableció a través de:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

Inicialmente, mi pregunta era cómo configurar esto en Magento 2.0, pero aparentemente hay diferencias entre Magento 2.0 y Magento 2.1

Para Magento 2.0: Arkadii Chyzhov ha señalado cómo configurar esto (ver más abajo).

Para Magento 2.1: fschmengler ha sugerido una solución (ver más abajo).

Sin embargo, M 2.1 parece no proporcionar una solución sencilla a través del backend. ¿Alguien puede encontrar una solución adicional para M 2.1?

Els den Iep
fuente

Respuestas:

82

Tiendas> Configuración> Configuración> Avanzado> Administrador> Seguridad> Duración de la sesión de administración (segundos)

También existe la posibilidad de establecer este parámetro directamente en la base de datos, simplemente coloque un valor en la ruta

admin / security / session_lifetime

en la tabla core_config_data

Actualizar

Magento 2.1 admin cookie life time = Stores> Settings> Configuration> Advanced> Admin> Security> Admin Session Lifetime (segundos) o hasta que el usuario cierre el navegador

Dado que Magento 2.1 introduce la vida útil de la cookie de administrador como "caduca al cerrar el navegador", junto con el valor en Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds). Eso significa que el tiempo de vida de la sesión es igual al valor en Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)o cuando se cierra un navegador.

O puede configurar un nuevo valor para la cookie de administración, como se propone en la respuesta de fschmengler

Arkadii Chyzhov
fuente
¿le interesaría ajustar la funcionalidad de la navegación por capas en nuestro sitio web M2?
Els den Iep
@ElsdenIep pls. encontrar mi información de contacto en el perfil
Arkadii Chyzhov
¿Sabes cuál es la columna en la base de datos para ese valor, para que pueda cambiarlo mediante programación?
jojman
Lo he instalado para ser 50400 pero todavía cierra la sesión después de unos 20 minutos ....
OZZIE
@ArkadiiChyzhov mira mi respuesta a continuación :)
OZZIE
16

Verifique la captura de pantalla de la imagen adjunta para comprender mejor el proceso de administración.

Vaya a Tiendas-> Configuración-> Configuración-> Avanzado-> Admin-> Seguridad-> Duración de la sesión de administración (segundos)

Y verifique la captura de pantalla. ingrese la descripción de la imagen aquí

Yogesh Trivedi
fuente
10

Solución para Magento 2.1+

Desde Magento 2.1, la duración de la sesión de administrador es siempre "sesión", es decir, hasta que se cierra el navegador. Estaha sido podría haber sido introducido por razones de seguridad.

El código relevante está en Magento\Backend\Model\Session\AdminConfig:

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

Si desea cambiar este comportamiento, puede agregar un complemento para esta clase con el siguiente método de interceptor:

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

Donde $this->scopeConfigdebería ser una instancia de \Magento\Framework\App\Config\ScopeConfigInterface, inyectado a través del parámetro constructor.

De esta forma, la duración de la cookie se usa desde la configuración, al igual que en la interfaz.

Tenga en cuenta que la configuración en Tiendas> Configuración> Avanzado> Seguridad de administrador> Sesión de por vida ya no tiene ningún efecto en las cookies. Se utiliza para determinar la duración de la sesión de Redis, por lo que si aumenta la duración de la cookie, también debe aumentar este valor.

Fabian Schmengler
fuente
Me pregunto si podría explicar esta razón de seguridad. Desde mi punto de vista, establecer la duración de la cookie de administrador en 0, trae discrepancias y un comportamiento no obvio, si estamos usando 'admin / security / session_lifetime', que define el tiempo de vida de la sesión de administrador, y que depende implícitamente de 2.1 en la duración de la cookie.
Arkadii Chyzhov
1
Supuse que es para evitar el caso de que un administrador cierre la ventana sin "cerrar sesión" y que cualquier persona que tenga acceso a la misma PC ya haya iniciado sesión. Esto no es una amenaza importante y estoy de acuerdo con usted en que es una mala decisión hacer que esta "característica" no sea tan obvia.
Fabian Schmengler
Pero busqué el compromiso responsable ahora y encontré esto: github.com/magento/magento2/commit/… "MAGETWO-49092: Clave de formulario no válida en la página de inicio de sesión de administrador" - suena más como una solución alternativa para ocultar otro error con más o menos efectos secundarios accidentales y al menos indocumentados.
Fabian Schmengler
Debe haber más actividad, porque mi sesión aún caduca sin cerrar mi navegador.
Matt Cosentino
1
@Volvox mira con atención: el complemento es para setCookieLifetime, un método público con parámetros
Fabian Schmengler
6

Una nota aquí, la respuesta aceptada funciona, sin embargo, magento 2 usa la carpeta php predeterminada para almacenar archivos de sesión, si tiene esto configurado en php:

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

entonces esto se agrega al sistema cron mediante la instalación de php.

Entonces puedes

  • deshabilitar ese cron
  • o mejor: aumento gc_maxlifetimeen php.ini (ya que este será el límite superior)
OZZIE
fuente
2

Otra solución sin modificar ninguna configuración es instalar cualquiera auto refresh addonpara su navegador y configurar su tiempo (60 segundos).

Se actualizará automáticamente la página por cada 6o segundos, lo que evita que la vida útil de la sesión caduque y podemos comenzar a trabajar en otra pestaña.

Solía Easy Auto Refreshy funciona bien para mí.

Amit Singh
fuente
no seas tonto con tales "soluciones". Es totalmente inaceptable.
sellio
2

Si está utilizando varias máquinas virtuales / servidores para web y db y el tiempo no está sincronizado, también causó el problema.

Por lo tanto, si todas las opciones anteriores no funcionan, verifique la marca de tiempo / fecha de los dos servidores cuando esté utilizando varios servidores para web y db.

Aunik Rahman
fuente
1

No sé por qué, pero para algunos de nosotros, configurar la duración de la sesión de administración desde el backend no funciona, así que encontré un par de soluciones:

  1. En php.ini, cambie session.gc_maxlifetime de 1440 a la cantidad de segundos que desee. (Esta solución funcionó para mí, probada en magento 2.2.0 y 2.2.1)

  2. En .htaccess agregue "php_value session.gc_maxlifetime 28800" o la cantidad de segundos que desee.

  3. Al configurar manualmente la vida útil. Vaya a vendor / magento / module-encryption-key / etc / config.xml y cambie de 900 a la cantidad de segundos que desee.

Espero que una de estas soluciones también funcione para otros.

Sylaratty
fuente