Laravel在用户级定制了session.lifetime

问题描述 投票:4回答:2

我在一个中间件(对于Laravel网络应用程序)中覆盖session.timeout值,但它似乎没有影响会话超时。虽然如果我调试它显示值我已覆盖。

Config::set('session.lifetime', 1440);

默认值如下:

'lifetime' => 15,

我正在处理的网站对于大多数用户而言会话生命周期非常短,但对于选定的用户,我希望提供延长的会话生命周期。

php session laravel-5 laravel-5.2
2个回答
3
投票

似乎实现动态lifetime值的唯一方法是在会话启动之前设置中间件的值。否则为时已​​晚,因为应用程序SessionHandler已经使用默认配置值进行了实例化。

namespace App\Http\Middleware;

class ExtendSession
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, $next)
    {
        $lifetime = 2;
        config(['session.lifetime' => $lifetime]);
        return $next($request);
    }
}

然后在kernel.php文件中,在StartSession之前添加此类。

\App\Http\Middleware\ExtendSession::class,
\Illuminate\Session\Middleware\StartSession::class,

1
投票

您的用户登录时会出现问题,之后您将更改会话生存期配置变量。变量已针对当前请求进行了更改,但用户在登录时具有指定生命周期的会话。

您必须更改登录方法。并执行以下步骤:

  1. 尝试用户是否存在于数据库中
  2. 如果是,并且他是需要更长会话生命周期的用户,请运行config(['session.lifetime' => 1440]);
  3. 登录用户
  4. 享受当前用户更长的会话生命周期

我建议使用帮助器动态更改配置

config(['session.lifetime' => 1440]);
© www.soinside.com 2019 - 2024. All rights reserved.