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的生存期,则还应该增加此值。