Laravel Session中间件坏了

时间:2016-03-17 12:14:39

标签: laravel laravel-5 laravel-5.1 laravel-5.2 middleware

在我的本地系统上,一切正常,但在我们的测试系统上部署Laravel 5.2之后,会话中间件看起来很糟糕。有人可以帮忙吗?

Argument 1 passed to Illuminate\Session\Middleware\    
StartSession::addCookieToResponse() must be an instance of  
Symfony\Component\HttpFoundation\Response, boolean given, called in   
... /httpdocs/service/vendor/laravel/framework/src/Illuminate/Session 
/Middleware/StartSession.php on line 72 and defined

全球中间件:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\CORSMiddleware::class,
    \LucaDegasperi\OAuth2Server\Middleware\OAuthExceptionHandlerMiddleware::class
];

6 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。在调查时,我发现在我的代码中的某些时候,我使用了return

事实证明(正如你在handle方法的最后看到的那样)在执行handle方法之后你应该总是调用return $next($request);

答案 1 :(得分:3)

Illuminate \ Session \ Middleware \ StartSession类中的addCookieToResponse方法想要一个Response对象作为第一个参数。确保你在所有人中退回一个 路由。

这是一个可能的快速解决方案,根据您的情况进行更改。

在:

Route::get('hi', function() {
    return 'hi';
});

后:

Route::get('hi', function() {
    return response('hi');
});

答案 2 :(得分:3)

我的一个中间件(v5.8)也有类似的问题。 '调用成员函数SetCookie()为null','将CSRF令牌添加到响应cookie'

这是我的代码,在5.2中可以正常工作,但在Laravel 5.8中失败:

return view('pages.my_page')->with('data', $data);

更改为:

return response()->view('pages.my_page', ['data' => $data]);

干杯!

答案 3 :(得分:0)

In my case it was just cache. try running

php artisan config:cache

答案 4 :(得分:0)

对于所有来此错误的人来说,是cookie失败了。

  1. 所以最快的解决方法是使用其他浏览器。

  2. 在浏览器中转到设置,找到cookie并将其删除。

答案 5 :(得分:0)

我遇到了同样的问题,结果是我更改了生产服务器中 config/session.php 中的域


    'domain' => env('SESSION_DOMAIN', 'mydomain.com'),

在我使用 127.0.0.1 的开发服务器上无法访问我的域

改成


    'domain' => env('SESSION_DOMAIN', null),

现在工作正常