Laravel 5 禁用";曲奇;响应json时的标题

Laravel 5 禁用";曲奇;响应json时的标题,laravel-5,Laravel 5,我想在作为json响应时禁用(删除)“Cookie”头。实际上,我可以使用Laravel4.2在过滤器上设置Config::set('session.driver','array') 如果我在L5(版本5.0.5)中这样做了,我在日志文件中得到了以下错误 [YYYY-MM-DD ..:..:..] local.ERROR: exception 'ErrorException' with message 'Undefined index: _sf2_meta' in /foo/bar/vendor

我想在作为json响应时禁用(删除)“Cookie”头。实际上,我可以使用Laravel4.2在过滤器上设置
Config::set('session.driver','array')

如果我在L5(版本5.0.5)中这样做了,我在日志文件中得到了以下错误

[YYYY-MM-DD ..:..:..] local.ERROR: exception 'ErrorException' with message 'Undefined index: _sf2_meta' in /foo/bar/vendor/laravel/framework/src/Illuminate/Session/Store.php:280
Stack trace:
#0 /foo/bar/vendor/laravel/framework/src/Illuminate/Session/Store.php(280): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined index...', '/foo/bar/ve...', 280, Array)
#1 /foo/bar/vendor/laravel/framework/src/Illuminate/Session/Store.php(251): Illuminate\Session\Store->addBagDataToSession()
#2 /foo/bar/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(89): Illuminate\Session\Store->save()
#3 /foo/bar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(129): Illuminate\Session\Middleware\StartSession->terminate(Object(Illuminate\Http\Request), Object(Illuminate\Http\JsonResponse))
#4 /foo/bar/public/index.php(57): Illuminate\Foundation\Http\Kernel->terminate(Object(Illuminate\Http\Request), Object(Illuminate\Http\JsonResponse))
#5 {main}

事实证明,在route中间件中不再可能更改会话/cookie驱动程序。您必须在
照亮\Session\middleware\StartSession
中间件之前指定中间件

解决方案: 1.创建您自己的中间件:

class ApiSession implements Middleware{
    public function handle($request, Closure $next){
        $path = $request->getPathInfo();

        if(strpos($path, '/api/') === 0){
            \Config::set('session.driver', 'array');
            \Config::set('cookie.driver', 'array');
        }

        return $next($request);
    }
}
  • 将其添加到会话中间件之前的内核文件(app/Http/Kernel.php)中:
  • […]
    ApiSession::class,//检查是否存在API请求。如果是,请设置会话、cookie驱动程序
    Illumb\Session\Middleware\StartSession::class,
    […]


    糟糕的是,您不能将其用于路由组。您必须通过检查当前url路径来检查是否应用了此中间件。

    无论如何,如果您想在所有请求中禁用cookie,您可以按原样删除if语句:

    // myapp/app/Http/Middleware/ApiSession.php
    
    <?php
    
    namespace App\Http\Middleware
    
    use Closure;
    
    class ApiSession {
    
             public function handle($request, closure $next){
    
                   \Config::set('session.driver', 'array');
                   \Config::set('cookie.driver', 'array');
    
             }
    }
    
    //myapp/app/Http/Middleware/ApiSession.php
    此代码配置::set('session.driver','array')禁用laravel\u会话。。。set cookie Header set及以上代码禁用了该标头,但XRFF-TOKEN存在另一个名为set cookie的标头,要禁用此问题,您应该覆盖中间件VerifyCsrfToken

    下面是代码加载项app->Http->MiddleWare->VerifyCsrfToken.php,并将此函数添加到VerifyCsrfToken类

        protected function addCookieToResponse($request, $response)
    {
        $config = config('session');        
        if ($config['driver'] == 'array' || !$this->shouldPassThrough($request))
        {        
            return $response;
        }else
        {
            $response->headers->setCookie(
                new Cookie(
                    'XSRF-TOKEN', $request->session()->token(), time() + 60 * $config['lifetime'],
                    $config['path'], $config['domain'], $config['secure'], false
                )
            );
        }
        return $response;
    }
    

    也遇到了此问题,并创建了一个错误报告:您并不孤单!:)谢谢你的回答,但很抱歉我听不懂第二个。你能告诉我应该把哪个文件放到
    ApiSession::class
    ?@hide.h有一个文件,所有中间件映射都发生在这个文件中:
    app/Http/Kernel.php
    谢谢你给了我这么大的提示!我现在可以禁用“Set Cookie”标题,但我需要修改一下您建议的代码。无论如何,我会在这里发布我的解决方案!:)这有助于我摆脱
    laravel_session
    头,但我仍然看到
    XSRF-TOKEN
    头。你知道吗?