关于Laravel CSRF 的问题求助
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Laravel CSRF 的问题求助相关的知识,希望对你有一定的参考价值。
参考技术A 简单描述:提交的表单中已经加入了 _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::eq www.hbbz08.com uals($request->session()->token(), $token);
这个反回false,也就是我每次产生的token和session中得token会不一致。
这里就不理解了,如果我浏览器一直开着,session不过期,那么每次提交又都会生成新的token,是不是每次都会验证失败?
想到这个地方有点乱了,是不是哪个地方进入误区了? 向大家求助....
update:
前面理解错了一个地方,csrf()那个函数原来就是从session中取的token,当成是每次随机生成了.这样的话可能不知道什么原因导致token变了。 参考技术B 这个是csrf token过期了
看我博客有刷新的例子
http://blog.liusida.cn/content/6
关于laravel一些学习小知识
laravel小知识:
第一:打印出最近执行的sql语句
这里先开启query日志
DB::connection()->enableQueryLog();
之后赋值打印就可以了
$log = DB::getQueryLog();
dd($log); //打印sql语句
这样就可以了
第二:关于Csrf防跨域问题的使用
ajax表单传输的时候
头部
请求部分
使用就是这样,这样就可以防止跨域访问 关于CSRF的值存在本地的session里面
以上是关于关于Laravel CSRF 的问题求助的主要内容,如果未能解决你的问题,请参考以下文章
使用Larave5.6l提交POST请求出现The page has expired due to inactivity错误