【发布时间】:2024-04-14 06:55:01
【问题描述】:
我在 Laravel 5.1 上制作了单页应用程序。我使用 localStorage 来保存 API 密钥,我不需要 cookie。 Laravel 为我创建了两个 cookie:
- XSRF 令牌
- laravel_session
如果我在环境配置中将SESSION_DRIVER 设置为array,则不再生成laravel_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;
}
而addCookieToResponse 方法看起来像这样:
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;
}
似乎无论如何它都会设置这个cookie。我可以禁用这个中间件,但我想用它来验证带有 HTTP 标头的 CSRF 令牌。我可以完全禁用 cookie 吗?
【问题讨论】:
-
如果你使用 laravel 来回 API 使用令牌,为什么不完全禁用 VerifyCsrfToken 中间件?这会使用您不关心的 cookie。您可以通过转到 app/http/Kernel.php 并注释该行来禁用
-
只是为了了解更多背景信息,想要禁用 cookie 的原因是什么?
-
@ExoticChimp 有一项法律规定,如果您使用任何 cookie,则必须告知用户有关 cookie 的信息。我不需要它们,所以我宁愿禁用它们并摆脱“我们正在使用 cookie”信息:)
-
对网站运行至关重要的第一方 cookie 是豁免的,并且不需要您(欧盟 cookie 法)通知用户(取决于他们的性质)。在这种情况下,默认的 Laravel 会话 cookie 将被免除。法律刚刚放宽了
-
是的,这似乎引起了很多混乱。这是一篇让您入门的好文章:ec.europa.eu/ipg/basics/legal/cookies/index_en.htm
标签: php cookies laravel-5 single-page-application