带有Xdebug的Laravel 5总是抛出“有效载荷无效”。

时间:2017-11-17 16:35:24

标签: php laravel xdebug

我在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特有的。

6 个答案:

答案 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"
        ]
    },

更多信息https://stackoverflow.com/a/49795318/1998033

答案 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中间件组中。解决了我的问题。确实需要记住把它调回来。任何人有更好的解决方案吗?我尝试了上述方法,但没有人为我工作。