首页 > 解决方案 > 有没有办法在 Ajax 请求之后将 cookie 从 laravel 设置到另一个域?

问题描述

我正在学习 Laravel 护照包并使用 Vue.js 创建一个 SPA 来测试它,我想知道将令牌保存在客户端浏览器中,如果我将它保存在本地存储中,它将可以从 Javascript 访问并且任何人运行 js在浏览器上就可以阅读了!我的问题是;这种情况的解决方案是什么?如果我将令牌保存在 cookie 中它也可以访问,并且我阅读了有关 httpOnly cookie 的信息,那么如果 Javascript 无法访问令牌,我该如何设置 cookie 以从 API 的响应中保存令牌?有没有办法从 API 中保存 cookie?

我希望我能找到我的问题的答案。

标签: phplaravelvue.jscookies

解决方案


好吧,这里有几件事要理解。

仅 HTTP cookie

首先,HTTP cookie 由服务器使用set-cookie标头设置。在这种情况下,您作为开发人员无需做任何事情。浏览器会自动为您设置它,并将在每个 Ajax 或非 ajax 请求上发送回服务器。只要它没有过期,它就会发送cookie。

本地存储

当使用 LocalStorage 存储令牌时,任何 JavaScript 代码都可以读取它(如果被滥用,称为 XSS 攻击)。但是,这里要理解的关键是其他域的 JavaScript 代码无法读取 LocalStorage。范围仅限于您自己的站点。其他网站的 JS 无法读取。因此,如果您没有使用任何外部依赖项或受损的 CDN,那么您是安全的。

跨站 cookie

不可以。在任何情况下都无法设置跨域 cookie。只有其他域的服务器可以为自己设置一个 cookie(除非你有一些后端机制,比如 Gmail + Youtube 来共享会话)。但是,如果是子域,则允许以下内容:

  • 父域可以为任何子域设置 cookie。那就是example.com可以为*.example.com.
  • 子域可以为父域设置cookie。那就是xyz.example.com可以为example.com.

当然,规则比这更复杂。这篇文章应该可以帮助你进一步理解。


推荐阅读