Laravel Route:dispatch使用EncryptCookie创建新会话

问题描述

我的代码是:

…
$new_request = Request::create($page,'GET',$request->all(),$request->cookie());
$router = Route::dispatch($new_request);
…

使用中间件

\App\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,

问题: 在Route :: dispatch调用中的每个请求上都会创建一个新会话(如果我之前退出,则在创建新会话后不会创建任何会话):具有redis驱动程序的新Redis密钥,或具有文件驱动程序的新文件。 但是,一切工作正常,它只是向新的会话密钥/文件发送垃圾邮件,而不是始终保存相同的文件。 如果我删除了EncryptCookie,它可以解决此问题,仅使用一个文件,每次请求后不再有文件...

如何在启用EncryptCookies的情况下解决此问题?

解决方法

问题已解决,问题在于源代码有:

\ App \ Http \ Middleware \ EncryptCookies :: class, \ Illuminate \ Cookie \ Middleware \ AddQueuedCookiesToResponse :: class, \ Illuminate \ Session \ Middleware \ StartSession :: class,

和请求也具有这些中间件。 两次使用加密/启动会话似乎可以做到这一点。

简单的解决方案是使用Route:dispatch在源代码之前删除这些中间件,但将其保留在Request中。