即使使用Web中间件,Laravel 5.2会话值也不会持久存在

Chr*_*itz 12 session laravel laravel-5.2

我有一个Laravel 5.2项目,我正在使用它作为我正在构建的javascript客户端的模拟API.稍后将使用不同的Laravel项目替换模拟API功能.目前,我只需要能够提交API调用并获得预期的响应.

在我的模拟API中,我将身份验证状态存储在会话中.

我遇到的问题是我放入会话的值不是在http调用之间持久存在.

session put不是持久的gif

这看起来类似于我发现的不同stackoverflow帖子,但问题是我已经在web为我的API组使用中间件了.

我认为它可能是我的存储文件夹的权限(我使用默认的file会话驱动程序),vagrant是所有者并具有写访问权限:

存储目录权限

另外,如果它是权限问题,我认为它会产生运行时错误.

还有什么我想念的吗?

编辑

这是以下内容Config::get('session'):

config :: get('session')的内容

是的,这个StartSession类包含在web中间件组中:

Web中间件组中的StartSession类

以下是浏览器会话cookie与在Web服务器上创建的会话文件的镜头:

浏览器cookie与会话文件

这是请求的内容:

请求内容

how*_*nez 7

我有同样的问题,并能够通过替换让它工作

Route::group(['middleware' => ['web']], function () {
   ...
});
Run Code Online (Sandbox Code Playgroud)

Route::group(['middlewareGroups' => ['web']], function () {
   ...
});
Run Code Online (Sandbox Code Playgroud)

当所有文档都表明我们使用时,不知道为什么会这样 ['middleware' => ['web']]


小智 1

这是因为对 Laravel 进行了更改,默认情况下所有路由都是“web”中间件的一部分,因此在 paths.php 文件中再次分配它最终会分配两次。

解决方案是从路由中删除“web”中间件,或者从 RouteServiceProvider 中删除自动分配。

Laravel 更新之前:

  // /app/Providers/RouteServiceProvider.php
$router->group(['namespace' => $this->namespace], function ($router) {
    require app_path('Http/routes.php');
});
Run Code Online (Sandbox Code Playgroud)

Laravel 更新后:

// /app/Providers/RouteServiceProvider.php
$router->group([
    'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
    require app_path('Http/routes.php');
});
Run Code Online (Sandbox Code Playgroud)

请注意新更新如何自动将“web”中间件应用到所有路由。如果您想像以前一样继续使用 Laravel 5.2(在 paths.php 中手动分配“web”中间件),只需在此处将其删除即可。