如何解决Laravel 8:在中间件中设置会话生存期
我发现了一些指令,说明如何在中间件中动态设置会话生存期。我创建了一个中间件,该中间件根据路由名称设置配置“ session.lifetime”,并将其放置在所有中间件的顶部,因此在调用StartSession之前将首先调用它。 但是无论我如何尝试,Laravel始终采用env文件中定义的默认会话生存期。
任何想法可能是什么问题? Laravel 8(或7)有什么变化吗?我必须找到的东西是Laravel 5的东西,但我无法找到有关它的更多最新信息。
这就是我的中间件的样子:
/**
* Set the session lifetime for the current request.
*
* @param Request $request current request
* @param Closure $next next handler
* @param int|null $lifetimeMin lifetime in minutes.
*
* @return mixed
*/
public function handle(Request $request,Closure $next,?int $lifetimeMin = null)
{
if ($lifetimeMin !== null) {
Config::set('session.lifetime',$lifetimeMin);
} elseif (str_starts_with($request->route()->getName(),'api.')) {
$apiLifetime = Config::get('session.lifetime_api',525600);
Config::set('session.lifetime',$apiLifetime);
} elseif (str_starts_with($request->route()->getName(),'admin.')) {
$adminLifetime = Config::get('session.lifetime_admin',120);
Config::set('session.lifetime',$adminLifetime);
}
return $next($request);
}
为您提供帮助!
解决方法
看看这里:https://laravel.com/docs/8.x/configuration
Laravel 8 正在使用这样的配置助手:
//To set configuration values at runtime,pass an array to the config helper:
config(['app.timezone' => 'America/Chicago']);
有点像这样?
if ($lifetimeMin !== null) {
config(['session.lifetime' => $lifetimeMin]);
} elseif (str_starts_with($request->route()->getName(),'api.')) {
$apiLifetime = config('session.lifetime_api',525600);
config(['session.lifetime' => $apiLifetime]);
} elseif (str_starts_with($request->route()->getName(),'admin.')) {
$adminLifetime = config('session.lifetime_admin',120);
config(['session.lifetime' => $adminLifetime]);
}
还有 .. 默认配置从 env 文件中检索值。我可以想象旧的 Config::set 不能再重载它了。您是否尝试过在没有 env() 方法的情况下设置配置?
'lifetime' => env('SESSION_LIFETIME',120),
有点像
'lifetime' => 120,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。