使用Laravel 5在IE / Edge中复制Cookie(TokenMismatchException)

时间:2017-02-16 09:20:45

标签: internet-explorer-11 session-cookies laravel-5.3 microsoft-edge php-7

我们在Laravel 5.3中开发了一个网站,但只有IE / Edge浏览器提交表单有问题(TokenMismatchException)。

我尝试了一些方法来解决这个问题: TokenMismatchException in Edge and IE 11 with Laravel 5 App。 但是,Windows 10上的IE11 / Edge不再支持 P3P策略。 Reference

我发现问题是IE11 / Edge存储了具有相同键名(作为字符串)的重复cookie,尽管$ _COOKIE只为每个键存储一个(作为数组)。

例如,

$_SERVER['HTTP_COOKIE'] = "laravel_session=aaaaa; laravel_session=bbbb"
$_COOKIE = array('laravel_session' => 'aaaaa')

我使用了基本的网络中间件,例如

'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
],

基本上,laravel请求尝试使用$ _COOKIE中的值,但有时它不是正确的。

在这种情况下,laravel无法解密该值(在EncryptCookies中间件中MAC发生无效错误),因此密钥的$ request-> cookie变为null,并且在VerifyCsrfToken中间件中抛出TokenMismatchException。

有没有人知道IE11 / Edge何时为同一个密钥存储重复的cookie,我们如何避免它? 我找不到发生问题的具体方法,但它经常发生在IE / Edge中。

以下是一些可能与此问题相关的参考资料:

0 个答案:

没有答案