关于 Laravel CSRF 的问题求助
首先这里有人提到过
http://stackoverflow.com/questions/2887578...
跟我的问题基本相同。
简单描述:
- 提交的表单中已经加入了 _token字段
- 开机-》打开浏览器-》进入网站,此时默认已登录,记住了上次的登录
- 然后提交了个form 就出现了
token miss match
的异常
public function handle($request, Closure $next)
{
if ($this->isReading($request) || $this->tokensMatch($request))
{
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
抛出异常的位置,最后的那个throw,进一步跟入$this->tokensMatch方法发现
return StringUtils::equals($request->session()->token(), $token);
这个反回false,也就是我每次产生的token和session中得token会不一致。
这里就不理解了,如果我浏览器一直开着,session不过期,那么每次提交又都会生成新的token,是不是每次都会验证失败?
想到这个地方有点乱了,是不是哪个地方进入误区了?
向大家求助....
update:
前面理解错了一个地方,csrf()那个函数原来就是从session中取的token,当成是每次随机生成了.这样的话可能不知道什么原因导致token变了。
推荐文章: