Php 如何在Laravel 5中禁用Cookie?

Php 如何在Laravel 5中禁用Cookie?,php,cookies,laravel-5,single-page-application,Php,Cookies,Laravel 5,Single Page Application,我在Laravel 5.1上制作单页应用程序。我使用localStorage保存API密钥,不需要cookie。Laravel为我制作了两个饼干: XSRF-TOKEN 拉拉维尔会议 如果在我的环境配置中将SESSION\u驱动程序设置为array,则不再生成laravel\u SESSIONcookie 但是我认为XSRF-TOKENcookie可能有问题,因为我在VerifyCsrfToken中间件类中发现了这段代码: public function handle($request, C

我在Laravel 5.1上制作单页应用程序。我使用localStorage保存API密钥,不需要cookie。Laravel为我制作了两个饼干:

  • XSRF-TOKEN
  • 拉拉维尔会议
如果在我的环境配置中将
SESSION\u驱动程序设置为
array
,则不再生成
laravel\u SESSION
cookie

但是我认为
XSRF-TOKEN
cookie可能有问题,因为我在
VerifyCsrfToken
中间件类中发现了这段代码:

public function handle($request, Closure $next)
{
    if ($this->isReading($request) || $this->shouldPassThrough($request) || $this->tokensMatch($request)) {
        return $this->addCookieToResponse($request, $next($request));
    }

    throw new TokenMismatchException;
}
addCookietoreResponse
方法如下所示:

protected function addCookieToResponse($request, $response)
{
    $config = config('session');

    $response->headers->setCookie(
        new Cookie(
            'XSRF-TOKEN', $request->session()->token(), time() + 60 * 120,
            $config['path'], $config['domain'], false, false
        )
    );

    return $response;
}

看起来不管发生什么,它都会让这个曲奇变好。我可以禁用这个中间件,但我想用它来验证带有HTTP头的CSRF令牌。我可以完全禁用Cookie吗?

只需注释掉
app\Http\Kernel.php
中与Cookie和会话相关的行即可。以下是我发现的

\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,

希望有帮助。

从5.7.0开始,
XSRF-TOKEN
cookie现在是可选的。要禁用它,只需在/app/Http/Middleware/VerifyCsrfToken.php文件中设置以下内容


我刚刚在Laravel 6.0中测试了这一点。
要运行CSRF中间件,并且Laravel不添加cookie,您需要禁用(注释掉)以下中间件:

\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
这将阻止Laravel添加
Laravel\u会话
cookie


要禁用添加
XSRF-TOKEN
cookie,请打开
\App\Http\Middleware\VerifyCsrfToken::class
中间件并将
$addHttpCookie
属性设置为
false

小心,删除StartSession中间件会删除整个csrf令牌,因为csrf\u令牌函数fetch App('session')->TOKEN()


但是,当StartSession中间件尝试设置cookie时,它会检查驱动程序是否为null(sessionsPersist),但如果我将其设置为null,则无法通过“无法解析Lightlight\Session\SessionManager的空驱动程序

如果您使用的是使用令牌的laravel fro API,为什么不完全禁用VerifyCsrfToken中间件?”?这使用了你不在乎的饼干。您可以通过访问app/http/Kernel.php并对该行进行注释来禁用cookies。只是为了了解更多背景信息,您为什么要禁用cookies?@ExoticChimp有一条法律规定,如果您使用cookies,必须通知用户。我不需要它们,所以我宁愿禁用它们,并且不受“我们正在使用cookies”信息的影响:)对于站点工作至关重要的第一方cookies是免税的,并且不要求您(欧盟cookie法)通知用户(取决于其性质)。在这种情况下,默认的Laravel会话cookie将被豁免。法律放宽了一段时间是的,这似乎引起了相当多的混乱。这里有一篇很好的文章帮助您入门:当然,您可以通过HTTP头发送CSRF令牌,但您必须将令牌存储在客户端。因此,如果您希望禁用cookie,您必须了解如何传输和存储从后端接收的令牌。也许本地存储对存储来说很方便。发送过程也在您身上,即设置正确的HTTP头。只需在头中使用
,然后在ajax调用中使用
头:{'X-CSRF-TOKEN':$('meta[name=“CSRF-TOKEN”]')。attr('content')},
(jquery示例)。然而,laravel仍然抛出错误
“会话存储未按请求设置。”,
,我不知道为什么,但当您不使用
启动会话时,您总是会收到消息:“会话存储未按请求设置”。,在尝试验证CSRFToken时执行post请求时。我想使用session,但不使用cookies,就像普通的php
session\u start()
不需要cookies一样。这在拉雷维尔是如此的困难,真是太可笑了
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,