Php 如何解决Laravel不生成CSRF令牌的问题

Php 如何解决Laravel不生成CSRF令牌的问题,php,ajax,laravel,Php,Ajax,Laravel,好的,所以我一直在使用jQuery连接到一个控制器函数,该函数验证数据并使用AJAX提交数据。在我周六休息一天之前,这一切都完美无缺。回到昨天的项目中,我不断遇到HTTP代码419的错误 "message": "CSRF token mismatch.", "exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException", "fi

好的,所以我一直在使用jQuery连接到一个控制器函数,该函数验证数据并使用AJAX提交数据。在我周六休息一天之前,这一切都完美无缺。回到昨天的项目中,我不断遇到HTTP代码419的错误

"message": "CSRF token mismatch.",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
"file": "C:\\workspace\\app_name\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Exceptions\\Handler.php",
"line": 387,
所以我试着回显CSRF令牌,但它是空白的!请记住,它在星期五工作得很好,然后在星期天(昨天),没有外部输入,它只是随机地给我这个。它不生成令牌的原因可能是什么?

运行以下命令:

php artisan key:generate
然后清除缓存

php artisan cache:clear 
如果您想查看令牌值是否正在更改,请尝试下面的代码

Route::get('/token', function (Request $request) {
    $token = $request->session()->token();
    echo $token;
    $token = csrf_token();
    echo $token;

});

好的,所以我只是在工作日结束之前快速地将代码添加到我的代码中,所以没有时间进行测试,因此没有注意到错误

$request->session()->flush();
这行代码负责清除会话。但在Laravel文档中没有提到的是,由于CSRF令牌也是会话,因此使用它基本上不可能对数据库进行IO,因为它会清除所有会话,包括所述令牌。因此,在这一问题得到解决之前(最好使用一个代码片段来清除开发人员创建的会话,同时保留内置的Laravel会话),避免使用这一行代码。相反,请使用此选项清除单个会话:

// Forget a single key...
$request->session()->forget('name');
或单击此按钮以清除多个会话

// Forget multiple keys...
$request->session()->forget(['name', 'status']);
您还可以进一步了解这个漂亮框架的会话


最后,感谢@Indra Kumar S、@John Lobo、@Manjeet和@Paras Raiyani花时间浏览平台并为其他人提供帮助。肯定也会这样做。

当CSRF令牌丢失或过期时,Laravel框架会使用HTTP代码419。首先,感谢您抽出时间。如果令牌过期,我如何重新生成它?请尝试php artisan key:generateHello John,它用于在.env文件上生成APP_密钥,对吗?我仍然尝试过,但没有成功。好的。一旦你尝试使用不同的浏览器或清除浏览器缓存。还可以尝试php artisan view:clear php artisan config:clear非常感谢@Manjeet的建议。我刚刚找到了解决方案,这是我无知的结果,很高兴你找到了解决方案:)