Magento 2后端会话超时


53

在Magento 1.x中,后端会话超时是通过以下方式设置的:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

最初,我的问题是如何在Magento 2.0中进行设置,但显然Magento 2.0与Magento 2.1之间存在差异

对于Magento 2.0:Arkadii Chyzhov指出了设置方法(请参见下文)。

对于Magento 2.1:fschmengler建议了一种解决方案(请参见下文)。

但是,M 2.1似乎无法通过后端提供直接的解决方案。有人可以提出M 2.1的其他解决方案吗?

Answers:


82

商店>设置>配置>高级>管理员>安全性>管理员会话生存时间(秒)

也有可能直接将此参数设置为数据库,只需将值放在路径下

管理员/安全性/ session_lifetime

在表core_config_data中

更新资料

Magento 2.1管理员Cookie的生存时间=存储>设置>配置>高级>管理员>安全>管理员会话生存时间(秒) 直到用户关闭浏览器

由于Magento 2.1引入了管理Cookie的生存期,即“在浏览器关闭时到期”,以及中的Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)。这意味着,会话寿命等于Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)关闭浏览器时或关闭浏览器时的值。

或者,您可以设置新的admin cookie值,就像fschmengler的答案中建议的那样


您是否有兴趣在我们的M2网站上调整分层导航的功能?
Els den Iep

@ElsdenIep请。在个人资料中找到我的联系信息
Arkadii Chyzhov

您知道该值在数据库中的列是什么,因此我可以通过编程方式对其进行更改?
jojman

我将其设置为50400,但20分钟后仍然注销
。...– OZZIE

@ArkadiiChyzhov在下面看到我的回答:)
OZZIE

16

查看随附的图片屏幕快照,以更好地了解管理过程。

转到商店->设置->配置->高级->管理->安全->管理会话生存时间(秒)

并检查截图。 在此处输入图片说明


10

Magento 2.1+的解决方案

从Magento 2.1开始,管理会话的生存期始终为“会话”,即直到关闭浏览器。这个已经 可能出于安全原因而引入。

相关代码在Magento\Backend\Model\Session\AdminConfig

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

如果要更改此行为,则可以使用以下拦截器方法为此类添加一个插件:

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->scopeConfig应该是的实例\Magento\Framework\App\Config\ScopeConfigInterface,通过构造函数参数注入。

这样,cookie生存期就可以通过配置使用,就像在前端一样。

请注意,“ 商店”>“配置”>“高级”>“管理员安全性”>“会话生存期”中的配置不再对Cookie产生任何影响!它用于确定Redis会话的生存期,因此,如果增加cookie的生存期,则还应该增加此值。


我想知道您能否解释这个安全原因。从我的角度来看,如果我们使用的是“ admin / security / session_lifetime”,它定义了管理员会话的生存时间,并且将2.1隐式地依赖于cookie的生存时间,那么将admin的cookie生存时间设置为0会带来差异而不是明显的行为。
Arkadii Chyzhov

1
我认为这是为了防止管理员关闭窗口而不“注销”并且可以访问同一台PC的任何人都已经登录的情况。这不是主要威胁,我同意您的看法,这是一个错误的决定使这个“功能”变得不明显。
Fabian Schmengler '16

但是我现在搜索了负责任的提交,并发现了这一点:github.com/magento/magento2/commit/… “ MAGETWO-49092:管理员登录页面上的无效表单密钥” –听起来更像是一种解决方法,可以隐藏另一个带有更多错误的错误。或更少的偶然性,至少没有记录在案的副作用。
Fabian Schmengler

必须继续进行下去,因为我的会话仍在关闭而不关闭浏览器的情况下到期。
马特·科森蒂诺

1
@Volvox仔细看:该插件是for的setCookieLifetime,带有参数的公共方法
Fabian Schmengler

6

请注意,可接受的答案有效,但是magento 2使用默认的php文件夹来存储会话文件,如果您在php中进行了配置:

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

然后通过php安装将其添加到系统cron中。

所以你可以

  • 禁用该cron
  • 或更好:增加gc_maxlifetimephp.ini(因为这将是上限)

2

另一种无需修改任何设置的解决方案是auto refresh addon为您的浏览器安装任何设置 并设置其时间(60秒)。

它将每6o秒自动刷新一次页面,以防止会话寿命到期,我们可以开始使用其他标签了。

我用过Easy Auto Refresh,对我来说很好用。


不要对这种“解决方案”感到愚蠢。这是完全不能接受的。
sellio

2

如果您将多个VM /服务器用于Web和数据库,并且时间不同步,则也会导致此问题。

因此,如果上述所有选项均无效,则在将多个服务器用于Web和数据库时,请检查两个服务器的时间戳/日期。


1

我不知道为什么,但是对于我们中的某些人,从后端设置Admin Session Lifetime无效,因此我找到了一些解决方案:

  1. 在php.ini中,将session.gc_maxlifetime从1440更改为所需的秒数。(此解决方案对我有效,已在magento 2.2.0和2.2.1上进行了测试)

  2. 在.htaccess中,添加“ php_value session.gc_maxlifetime 28800”或您想要的秒数。

  3. 通过手动设置寿命。转到vendor / magento / module-encryption-key / etc / config.xml,将900s更改为所需的秒数。

希望其中一种解决方案也适用于其他解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.