我在VScode上配置Xdebug来调试我的laravel应用程序。但是,当我开始调试时,laravel总是抛出这个错误:Exception has occurred. Illuminate\Contracts\Encryption\DecryptException: The payload is invalid.
我已尝试运行php artisan optimize
。
这里有人已经遇到过这个问题吗?我正在使用Laravel 5.5
聚苯乙烯。我试图调试Laravel 4应用程序。它没有任何问题。所以,我认为它可能是Laravel 5特有的。
答案 0 :(得分:20)
默认情况下,Laravel会对请求中的所有Cookie进行加密,并随后解密。
使用Xdebug从浏览器调试应用程序时,会设置名为“XDEBUG_SESSION”的cookie。由于Laravel框架未设置此cookie,因此未加密,因此当框架自动检测并尝试解密cookie时,将引发错误。
正确的解决方案是将“XDEBUG_SESSION”cookie添加到App\Http\Middleware\EncryptCookies
中间件中的例外数组中。
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
'XDEBUG_SESSION'
];
答案 1 :(得分:2)
@ceejayoz评论解决了这个问题。我运行php artisan otimize,清除浏览器上的所有cookie,它开始正常工作。
答案 2 :(得分:1)
如果答案不起作用,请尝试将其添加到launch.json
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9001,
"ignore": [
"**/vendor/**/*.php"
]
},
答案 3 :(得分:0)
就我而言,我还必须关闭报告的例外和 Everything ,否则问题仍然存在。
答案 4 :(得分:0)
这是我的解决方案。我正在使用VsCode,并且文件配置xdebug(launch.json)必须与工作区
匹配{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"log":true,
"pathMappings": {
// "serverSourceRoot": "/var/www/html",
//"localSourceRoot": "${workspaceRoot}"
"/var/www/html":"/Users/{username}/sites/{mysitefolder}"
},
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
答案 5 :(得分:0)
暂时将\ App \ Http \ Middleware \ EncryptCookies :: class注释掉,该类位于app / Http / Kernel的Web中间件组中。解决了我的问题。确实需要记住把它调回来。任何人有更好的解决方案吗?我尝试了上述方法,但没有人为我工作。