微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 8:在中间件中设置会话生存期

如何解决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 举报,一经查实,本站将立刻删除。