我真的对此错误感到沮丧,我有带有ajax post请求的数据表,但是错误CSRF令牌不匹配很少出现。 这是我的jquery ajax发布设置
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
ajax:{
"url": "trip/jsondata",
"dataType": "json",
"type": "POST",
"data" : function ( d ){
d.nState= $('#viewoption').val(),
d.nYear = $('#viewyear').val();
}
},
我很好奇为什么我的发帖请求返回CSRF令牌不匹配,所以我修改了Illuminate \ Foundation \ Http \ Middleware \ VerifyCsrfToken文件以返回如下所示的令牌值。
public function handle($request, Closure $next)
{
if (
$this->isReading($request) ||
$this->runningUnitTests() ||
$this->inExceptArray($request) ||
$this->tokensMatch($request)
) {
return tap($next($request), function ($response) use ($request) {
if ($this->shouldAddXsrfTokenCookie()) {
$this->addCookieToResponse($request, $response);
}
});
}
$error='getTokenFromRequest :'.$this->getTokenFromRequest($request).' | X-CSRF-TOKEN :'.$request->header('X-CSRF-TOKEN').' | Session :'.$request->session()->token();
throw new TokenMismatchException('CSRF token mismatch. err: '.$error);
}
我尝试返回3个变量(getTokenFromRequest,X-CSRF-TOKEN和会话令牌)。 结果是:
消息:“ CSRF令牌不匹配。错误:getTokenFromRequest: w0nxu5OPWZHFrBFqqMtLsL3IWJ1vCg0VAGbCDt4c3 | X-CSRF-TOKEN: w0nxu5OPWWJFrBFqMt
您会看到带有会话令牌的X-CSRF-TOKEN有区别,我不知道为什么吗?
然后我尝试检入storage \ framework \ sessions文件夹,其中有两个文件。
第一个文件填充如下 a:7:{s:6:“ _ token”; s:40:“ w0nxu5OPWZHFrBFqMtLsL3IWJ1vCg0VAGbCDt4c3”;
第二个文件这样填充 a:2:{s:6:“ _ token”; s:40:“ CiMUsbN9BumKIElvrOzJX8TnCA8UeuAAaLzbfZTO”;
任何人都可以帮助解决我的应用程序中发生的事情吗?正常情况下,同时使用不同的令牌同时进行2次会话吗?