我正在使用 laravel 6。我希望我的 laravel CSRF 令牌每 60 秒过期一次。
配置/会话
“一生”=> 60,
首先,CSRF 存储在 XSRF-TOKEN cookie 中。参考号:50904763
根据问题(参考:51615122),我们通过添加名为
addCookieToResponse
的新方法来更改 app/Http/Middleware/VerifyCsrfToken.php 中的配置
use Symfony\Component\HttpFoundation\Cookie;
public function addCookieToResponse($request, $response) {
$config = config('session');
$session_life = env('CSRF_LIFE');
$response->headers->setCookie(
new Cookie(
'XSRF-TOKEN', $request->session()->token(), $this->availableAt($session_life),
$config['path'], $config['domain'], $config['secure'], false, false, $config['same_site'] ?? null
)
);
}
其中
$config
用于从现有生命周期获取会话信息。但是,我从 .env解析
$session_life
,以确保您可以尽可能多地自定义。
因此,结果很简单,将所有内容配置为所属区域,但在区域
$this->availableAt($session_life)
中,其中session_life
以秒为单位。
因此,请在 .env 中将
session_life
设置为 60,如下所示:
CSRF_LIFE="60"
保存并刷新页面,或清理缓存和配置后,会话生命周期将为两个小时,但 CSRF 将仅为 60 秒。
希望这有效。
经过长时间的测试,我最终得到了一些结果,您在会话中放入
lifetime
选项不允许设置以秒为单位的过期时间,它允许以分钟为单位。
所以,当你设置
lifetime = "60"
时,就意味着它将在1小时后过期。
因此,您必须在
lifetime = "1"
文件中设置 config/session.php
。另外,.env
文件中的默认值SESSION_LIFETIME=120
您必须将其替换为1SESSION_LIFETIME = 1
。
之后你必须通过命令清除缓存:
php artisan config:cache
现在,您的会话将在 1 分钟/60 秒后过期。
要查看更多信息,请检查此问题。