响应json时禁用"Cookie"标头

hid*_*e.h 5 laravel-5

我想在响应为json时禁用(删除)"Cookie"标头.实际上我可以Config::set('session.driver', 'array')使用Laravel 4.2 设置过滤器.

如果我在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}
Run Code Online (Sandbox Code Playgroud)

Mār*_*dis 3

好吧,事实证明,不再可能在路由中间件中更改会话/cookie 驱动程序。您必须在Illuminate\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);
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 将其添加到会话中间件之前的内核文件(app/Http/Kernel.php)中:

[..] ApiSession::class, // Check if an API request. If so, set session, cookie drivers Illuminate\Session\Middleware\StartSession::class, [..]

不好的部分是你不能将它与路由组一起使用。您必须通过检查当前的 url 路径来自行检查是否应用了此中间件。