多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 6种解决laravel报错 Session store not set on request - 原因 没有通过session中间件 - 修改1:添加中间件 `\Illuminate\Session\Middleware\StartSession::class,` - 修改2: 使用中间件web ### 注:这个方案只能解决一般的直接访问的,即请求头必须还有token的,如果没有token的请参考:Ajax跨域访问未携带token ![](https://img.kancloud.cn/96/cf/96cf166d2a1e85a55a069606fa3baa60_711x832.png) ### 回答1: 如果您需要会话状态,CSRF保护等,则需要使用Web中间件。 ``` Route::group(['middleware' => ['web']], function () { // your routes here }); ``` ### 回答2: 如果添加你的routes内部web middleware因任何原因不起作用,那么尝试将其添加$middleware到Kernel.php ``` protected $middleware = [ //... \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, ]; ```   ### 回答三: 如果Cas Bloem的答案不适用(即您确实web在适用的路由上获得了中间件),您可能需要检查HTTP内核中的中间件的顺序。 默认顺序Kernel.php是: ``` $middlewareGroups = [ '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, ], ]; ``` 请注意,VerifyCsrfToken之后StartSession。如果你有不同的顺序,它们之间的依赖关系也会导致Session store not set on request.异常。   ### 回答4: 在我的情况下(使用Laravel 5.3),仅添加以下2个中间件允许我访问API路由中的会话数据: ``` \App\Http\Middleware\EncryptCookies::class \Illuminate\Session\Middleware\StartSession::class 整个声明($middlewareGroups在Kernel.php中): 'api' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Session\Middleware\StartSession::class, 'throttle:60,1', 'bindings', ], ```   ### 回答五:全局会话助手: session() 写作: ``` session(['key'=>'value']); ``` 推动: ``` session()->push('key', $notification); ``` 检索: ``` session('key'); ```   ### 回答6: 问题可能是您尝试访问控制器__constructor()功能内的会话 。 从Laravel 5.3+开始,这是不可能的,因为它无论如何都无法工作,如升级指南中所述。 在以前版本的Laravel中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户。这从未打算成为框架的明确特征。在Laravel 5.3中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行。   解决方法 如果您仍想使用它,您可以动态创建中间件并在构造函数中运行它,如升级指南中所述: 作为替代方案,您可以直接在控制器的构造函数中定义基于Closure的中间件。在使用此功能之前,请确保您的应用程序正在运行Laravel 5.3.4或更高版本: ``` middleware(function ($request, $next) { $this->projects = Auth::user()->projects; return $next($request); }); } } ```