Tempo limite da sessão de back-end do Magento 2

53

No Magento 1.x, o tempo limite da sessão de back-end foi definido através de:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

Inicialmente, minha pergunta era como definir isso no Magento 2.0, mas aparentemente existem diferenças entre o Magento 2.0 e o Magento 2.1

Para o Magento 2.0: Arkadii Chyzhov apontou como definir isso (veja abaixo).

Para o Magento 2.1: o fschmengler sugeriu uma solução (veja abaixo).

No entanto, o M 2.1 parece não fornecer uma solução direta por meio do back-end. Alguém pode criar uma solução adicional para o M 2.1?

Els den Iep
fonte

Respostas:

82

Lojas> Configurações> Configuração> Avançado> Admin> Segurança> Vida útil da sessão do administrador (segundos)

Também existe a possibilidade de definir esse parâmetro diretamente no banco de dados, basta colocar um valor no caminho

admin / security / session_lifetime

na tabela core_config_data

Atualizar

Tempo de vida útil do cookie do Magento 2.1 admin = Armazena> Configurações> Configuração> Avançado> Admin> Segurança> Vida útil da sessão do administrador (segundos) ou até o usuário fechar o navegador

Como o Magento 2.1 introduz a vida útil do cookie do administrador como "expira no fechamento do navegador", juntamente com o valor em Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds). Isso significa que o tempo de vida da sessão é igual ao valor Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)ou quando um navegador é fechado.

Ou você pode configurar um novo valor para o cookie de administrador, como proposto na resposta de fschmengler

Arkadii Chyzhov
fonte
você estaria interessado em ajustar a funcionalidade da navegação em camadas em nosso site M2?
Els den Iep
@ElsdenIep pls. encontrar minhas informações de contato no perfil
Arkadii Chyzhov 27/07/16
Você sabe qual é a coluna no banco de dados para esse valor, para que eu possa alterá-lo programaticamente?
jojman
Eu defini-lo para ser 50400, mas ainda registra para fora após cerca de 20 minutos ....
OZZIE
@ArkadiiChyzhov ver minha resposta abaixo :)
OZZIE
16

Verifique a captura de tela da imagem anexada para entender melhor o processo administrativo.

Vá para Lojas-> Configurações-> Configuração-> Avançado-> Admin-> Segurança-> Tempo de Vida da Sessão do Administrador (segundos)

E verifique a captura de tela. insira a descrição da imagem aqui

Yogesh Trivedi
fonte
10

Solução para Magento 2.1+

Desde o Magento 2.1, a vida útil da sessão de administrador é sempre "sessão", ou seja, até o navegador ser fechado. estefoi pode ter sido introduzido por razões de segurança.

O código relevante está em Magento\Backend\Model\Session\AdminConfig:

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

Se você deseja alterar esse comportamento, pode adicionar um plug-in para esta classe com o seguinte método interceptador:

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

Onde $this->scopeConfigdeve ser uma instância de \Magento\Framework\App\Config\ScopeConfigInterface, injetado via parâmetro construtor.

Dessa forma, a vida útil do cookie é usada na configuração, assim como no frontend.

Observe que a configuração em Lojas> Configuração> Avançado> Segurança do administrador> Tempo de vida da sessão não tem mais efeito sobre os cookies! Ele é usado para determinar a vida útil da sessão Redis; portanto, se você aumentar a vida útil do cookie, também deverá aumentar esse valor.

Fabian Schmengler
fonte
Gostaria de saber se você poderia explicar esse motivo de segurança. Do meu ponto de vista, definir o tempo de vida do cookie do administrador como 0, gera discrepância e comportamento não óbvio, se estivermos usando 'admin / security / session_lifetime', que define o tempo de vida da sessão do administrador e depende implicitamente de 2.1 no tempo de vida do cookie.
Arkadii Chyzhov 15/09/16
11
Eu assumi que é para evitar que um administrador feche a janela sem "sair" e qualquer pessoa que tenha acesso ao mesmo PC já esteja logada. Essa não é uma grande ameaça e eu concordo com você que é uma má decisão para tornar esse "recurso" não óbvio.
Fabian Schmengler
Mas procurei o commit responsável agora e encontrei o seguinte: github.com/magento/magento2/commit/… "MAGETWO-49092: chave de formulário inválida na página de login do administrador" - parece mais uma solução alternativa para ocultar outro bug com mais ou efeito colateral menos acidental e pelo menos indocumentado.
Fabian Schmengler
Deve haver mais coisas acontecendo, porque minha sessão ainda está expirando sem fechar o navegador.
Matt Cosentino
11
@Volvox olhar com cuidado: o plugin é para setCookieLifetime, um método público com parâmetros
Fabian Schmengler
6

Uma observação aqui, a resposta aceita funciona, no entanto, o magento 2 usa a pasta php padrão para armazenar arquivos de sessão, se você tiver isso configurado no php:

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

então isso é adicionado ao cron do sistema pela instalação do php.

Então você pode

  • desativar esse cron
  • ou melhor: aumento gc_maxlifetimeno php.ini (como esse será o limite superior)
OZZIE
fonte
2

Outra solução sem modificar nenhuma configuração é instalar qualquer auto refresh addonpara o seu navegador e definir seu tempo (60 segundos).

Ele atualizará automaticamente a página a cada 6o segundos, o que impede que a vida útil da sessão expire e podemos começar a trabalhar em outra guia.

Eu usei Easy Auto Refreshe funciona bem para mim.

Amit Singh
fonte
não seja bobo com essas "soluções". é totalmente inaceitável.
sellio 28/06
2

Se você estiver usando várias VMs / servidores para web e db e o tempo não for sincronizado, também causará o problema.

Portanto, se todas as opções acima não funcionarem, verifique a data / hora dos dois servidores quando você estiver usando vários servidores para web e db.

Aunik Rahman
fonte
1

Não sei por que, mas para alguns de nós, definir a duração da sessão de administrador do back-end não funciona, então encontrei algumas soluções:

  1. No php.ini, mude session.gc_maxlifetime de 1440 para o número de segundos que desejar. (Esta solução funcionou para mim, testada no magento 2.2.0 e 2.2.1)

  2. Em .htaccess, adicione "php_value session.gc_maxlifetime 28800" ou ao número de segundos que desejar.

  3. Definindo manualmente a vida útil. Vá para vendor / magento / module-encryption-key / etc / config.xml e mude de 900 para o número de segundos que desejar.

Espero que uma dessas soluções funcione para outros também.

Sylaratty
fonte