Laravel 5 禁用";曲奇;响应json时的标题
我想在作为json响应时禁用(删除)“Cookie”头。实际上,我可以使用Laravel4.2在过滤器上设置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
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);
}
}
[…]
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
头。你知道吗?