dee*_*eej 5 php session laravel-5 laravel-5.2
我正在session.timeout使用一种中间件(适用于Laravel Web应用程序)覆盖价值,但就超时会话而言,这似乎并没有影响。虽然如果我调试它显示出价值,我已经覆盖了。
Config::set('session.lifetime', 1440);
Run Code Online (Sandbox Code Playgroud)
默认值如下:
'lifetime' => 15,
Run Code Online (Sandbox Code Playgroud)
我正在工作的网站对大多数用户来说会话寿命很短,但是对于某些用户,我想提供更长的会话寿命。
似乎实现动态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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在 kernel.php 文件中,在StartSession.
\App\Http\Middleware\ExtendSession::class,
\Illuminate\Session\Middleware\StartSession::class,
Run Code Online (Sandbox Code Playgroud)
这是对我有用的方法(使用 Laravel 5.6 或 5.5),让用户在登录时选择会话持续时间。
在 Auth 控制器中编辑会话的生命周期不起作用,因为此时会话已经启动。您需要添加在 Laravel 运行其自己的“StartSession”中间件之前执行的中间件。
一种方法是创建一个 cookie 来存储用户的生命周期长度首选项,并在为每个请求设置会话过期时使用该值。
namespace App\Http\Middleware;
use Illuminate\Support\Facades\Cookie;
class SetSessionLength {
const SESSION_LIFETIME_PARAM = 'sessionLifetime';
const SESSION_LIFETIME_DEFAULT_MINS = 5;
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, $next) {
$lifetimeMins = Cookie::get(self::SESSION_LIFETIME_PARAM, $request->input(self::SESSION_LIFETIME_PARAM)); //https://laravel.com/api/6.x/Illuminate/Support/Facades/Cookie.html#method_get
if ($lifetimeMins) {
Cookie::queue(self::SESSION_LIFETIME_PARAM, $lifetimeMins, $lifetimeMins); //https://laravel.com/docs/6.x/requests#cookies
config(['session.lifetime' => $lifetimeMins]);
}
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
\App\Http\Middleware\SetSessionLength::class, 就在 之前 添加\Illuminate\Session\Middleware\StartSession::class,。
'lifetime' => env('SESSION_LIFETIME', \App\Http\Middleware\SetSessionLength::SESSION_LIFETIME_DEFAULT_MINS),
要让用户选择他们喜欢的分钟数,请添加分钟下拉菜单,例如以 开头<select name="{{\App\Http\Middleware\SetSessionLength::SESSION_LIFETIME_PARAM}}">。否则,将SetSessionLength.php上面的内容更改为不从其他地方提取$request->input,而是从其他地方检索,例如该用户的数据库记录。
出现此问题的原因是会话已经启动,之后您正在更改会话生存期配置变量。
需要针对当前请求更改该变量,但用户已经具有指定生命周期的会话。
您必须更改登录方法。并执行以下步骤:
config(['session.lifetime' => 1440]);我建议使用助手来动态更改配置。
config(['session.lifetime' => 1440]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2644 次 |
| 最近记录: |