【问题标题】:Laravel Session Middleware brokenLaravel 会话中间件损坏
【发布时间】:2016-03-17 12:14:39
【问题描述】:

在我的本地系统上一切正常,但是在我们的测试系统上部署 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
];

【问题讨论】:

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


    【解决方案1】:

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

    事实证明(正如您在句柄方法的末尾看到的那样),在执行句柄方法后,您应该始终调用return $next($request);

    【讨论】:

    • 在函数末尾错误地注释掉return $next($request);遇到了同样的问题
    • Taylor Towell 说它自 5.1.1 github.com/laravel/lumen-framework/issues/117 起已修复,但我在 5.3 中有此错误(我返回错误)。感谢您的解决方法
    【解决方案2】:

    我的一个中间件(v5.8)也有类似的问题。 '调用成员函数 SetCookie() on 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】:

      Illuminate\Session\Middleware\StartSession 类中的 addCookieToResponse 方法需要一个 Response 对象作为第一个参数。确保您退回所有物品中的一件 路线。

      这是一个可能的快速修复方法,请根据您的情况进行更改。

      之前:

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

      之后:

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

      【讨论】:

      • 这解决了我在中间件中直接使用 return 语句的问题。
      【解决方案4】:

      就我而言,它只是缓存。尝试运行

      php artisan config:cache
      

      【讨论】:

        【解决方案5】:

        对于所有因这个错误而来的人来说,是 cookie 失败了。

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

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

        【讨论】:

          【解决方案6】:

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

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

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

          改成

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

          现在工作正常

          【讨论】:

            猜你喜欢
            • 2011-02-13
            • 2016-12-22
            • 2013-07-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-13
            • 2016-08-16
            • 2014-07-17
            相关资源
            最近更新 更多