Cookie就摆在那,为什么死活吃不到?

栏目: Node.js · 发布时间: 4年前

内容简介:浏览器里明明存在的cookie,居然获取不到???近来闲来无事,打算了解一下后端,既然想一探究竟,就从基本的注册登录开始做起。作为一名前端开发人员,用 Node.js 去体验后端应该是最快上手的方式了。看了一下文档,好长...没那么多时间看,直接...
Cookie就摆在那,为什么死活吃不到?

浏览器里明明存在的cookie,居然获取不到???

console.log(document.cookie);
// 没有???
复制代码
Cookie就摆在那,为什么死活吃不到?

起因

近来闲来无事,打算了解一下后端,既然想一探究竟,就从基本的注册登录开始做起。

技术选型

作为一名前端开发人员,用 Node.js 去体验后端应该是最快上手的方式了。看了一下文档,好长...没那么多时间看,直接...

  • 框架 koa2
  • 数据库 Mysql,不会操作数据库找到了 Sequelize
  • 请求 Axios

思路

  • 账户密码,不做加密,直接明文。
  • 登陆
    • 使用 jwt (jsonwebtoken) 生成 token 。
    • 使用 koa2 ctx.cookies.set 在后端设置 cookie ,保存 token 。
  • 跨域请求 koa2-cors

问题来了

问题一:填好用户名密码,点击登录,浏览器中没有被设置 cookie

解决办法: 使用 Axios 请求时,增加属性 withCredentials: true,这样就请求就可以携带 cookie 了。

产生这种情况的原因是因为 koa2-cors,如果在前端使用代理跨域不会出现这种情况。

问题二:浏览器中虽然能看到 cookie 中已经存在 token,但是前端代码中获取不到

解决办法:koa2 设置 cookie 时,设置 httpOnly: false 即可。

查找原因

doucment.cookie 无法获取到 cookie 是因为 同源策略 和 HttpOnly 标记的原因。

withCredentials:表示跨域请求时是否需要使用凭证,默认是 false

MDN XMLHttpRequest.withCredentials 属性是一个 Boolean 类型,它指示了是否该使用类似 cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用 withCredentials 属性是无效的。 此外,这个指示也会被用做响应中 cookies 被忽视的标示。默认值是 false。 如果在发送来自其他域的 XMLHttpRequest 请求之前,未设置 withCredentials 为true,那么就不能为它自己的域设置 cookie 值。而通过设置 withCredentials 为true获得的第三方 cookies,将会依旧享受同源策略,因此不能被通过 document.cookie 或者从头部相应请求的脚本等访问。

httpOnly:服务器可访问 cookie, 默认是 true

MDN 为避免跨域脚本 (XSS) 攻击,通过JavaScript的 Document.cookie API无法访问带有 HttpOnly 标记的Cookie,它们只应该发送给服务端。如果包含服务端 Session 信息的 Cookie 不想被客户端 JavaScript 脚本调用,那么就应该为其设置 HttpOnly 标记。

Cookie就摆在那,为什么死活吃不到?

换种方式

MDN 上说 可能会 XSS 攻击,所以换种方式,存储到 localstorage 里吧。请求时,将 token 加在 header 中 Authorization。


以上所述就是小编给大家介绍的《Cookie就摆在那,为什么死活吃不到?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆裂

爆裂

[美] 伊藤穰一、[美] 杰夫·豪 / 张培、吴建英、周卓斌 / 中信出版集团 / 2017-9-1 / 65.00元

越是在发生重大改变的时刻,越是会出现两极分化,赢家、输家有时只在一念间。未来已经装上了全新的操作系统。这是一个重大升级,对我们而言,随之而来的则是陡峭的学习曲线。在指数时代,替换旧逻辑,我们的思维亟需与世界对接,推翻过去已经成为大众所接受的常识,学会差异化思考才能屹立不倒,不被卷入历史的洪流。 在《爆裂》一书中,伊藤穰一和杰夫·豪将这一逻辑提炼为9大原则,帮助人们驾驭这一动荡时刻,应对当下的......一起来看看 《爆裂》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换