我想在响应为json时禁用(删除)“Cookie”标头。实际上我可以使用Laravel 4.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}
答案 0 :(得分: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);
}
}
[..]
ApiSession::class, // Check if an API request. If so, set session, cookie drivers
Illuminate\Session\Middleware\StartSession::class,
[..]
不好的一点是你不能将它用于路线组。如果通过检查当前的URL路径来应用此中间件,则必须检查自己。
答案 1 :(得分:0)
无论如何,如果要在所有请求中禁用cookie,可以按原样删除if语句:
some message
.
. # after specified interval
.
some message
q # program should end
并记得添加/修改你的kernel.php,如“MārtiņšBridis”所示。 现在,您的应用不使用Cookie。
答案 2 :(得分:0)
此代码Config :: set('session.driver','array')禁用laravel_session ...在set-cookie中,Header set和上面的代码禁用了HEADER,但另一个名为Set-Cookie的HEADER存在于XRFF -TOKEN,要禁用此问题,您应该覆盖中间件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;
}