【发布时间】:2017-06-22 12:49:03
【问题描述】:
最新版本的 Laravel(正确地)使用 POST 来注销会话。这样做的原因是 GET/HEAD 应该只用于符合 HTTP 的被动操作。
使用 csrf 令牌发布还可以防止恶意用户/站点将您从会话中注销: https://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection
但是如果会话已经超时,并且用户单击注销(这会触发 POST 到注销路由),则会收到令牌不匹配错误。这是有道理的 - 令牌不匹配,因为会话已过期。
我可以根据请求变量捕获特定的 TokenMismatchException,如果是这样,继续他们愉快的方式(到注销的重定向路径,比如“home”或“/”)。像这样:
public function render($request, Exception $e)
{
if ($e instanceof TokenMismatchException && $request->getRequestUri() === '/logout') {
return redirect('/');
}
return parent::render($request, $e);
}
我的问题是:如果我这样做,首先令牌的意义是什么?以及如何在用户会话过期时注销用户,同时保持使用带有 CSRF 令牌的 POST 注销的预期结果?
【问题讨论】:
-
如果需要保护注销:security.stackexchange.com/questions/62769/… 要回答您的问题,请给我信息,什么样的机制使您的会话超时?
-
@Mkay1 假设任何类型的超时(会话超时、会话被破坏等)。您提供的链接与我的问题中的链接相同
标签: php laravel security session laravel-5.3