6-5 一节中 cookie 限制

来源:7-5 cookie做限制(2)

艾狄生

2019-03-16

6-5 一节中 cookie 限制

cookieStr.split(';').forEach(item => {
	if(!item) {
		return
    }
    
    const arr = item.split('=')
    const key = arr[0].trim()
    const val = arr[1].trim()
	
	req.cookie(key) = val
})

设置了 httpOnly 和前端加的cookie
相同的key 还是会被覆盖 后端还是取值最后面的 值??

提出疑问

写回答

2回答

双越

2019-03-16

反正就是一个字符串的解析。遇到重复的可以进行任何的改造:后者覆盖前者,前者覆盖后者,两者都要 —— 都可以进行处理。

0
6
dong起来
回复
双越
纠正自己的错误,httpOnly确实限制了path=/的cookie设置
2019-04-21
共6条回复

想个昵称真难

2019-03-26

先来看看没有加 httpOnly 的情况:

res.setHeader('Set-Cookie', `userId=${userId}`)

//img.mukewang.com/szimg/5c9990e5000194b213160299.jpg

document.cookie 的输出结果是 "userId=1553567783435_0.03530486473331074"


这时候给 document.cookie 赋值一个 "userId=123",再看看 Cookie 变成什么:

//img.mukewang.com/szimg/5c9992e00001b5fc12480266.jpg

document.cookie 的输出结果是 "userId=123",也就是说,也就是说之前的 userId 的值被覆盖了。


再来看看加了 httpOnly 的情况:

res.setHeader('Set-Cookie', `userId=${userId}; httpOnly`)

//img.mukewang.com/szimg/5c99941f0001ab4811890221.jpg

给 document.cookie 赋值一个 "userId=123",看看 Cookie 变成什么:

//img.mukewang.com/szimg/5c999633000162f905600253.jpg

//img.mukewang.com/szimg/5c99964e0001d92212690233.jpg

会发现,userId 这个 Cookie 的值根本没有任何的变化,也就是说,httpOnly 这个作用生效了,它防止了前端对 userId 这个 Cookie 记录进行修改。你也可以理解为,userId 这个记录对前端隐藏了,既获取不到 userId 这个值,也不能给 userId 这个 Cookie 赋值。

至于为什么视频中 username 设置了 httpOnly 之后,进行了 document.cookie="username=zhangsan" 之后竟然能够加到 Cookie 中去,这个我也很疑惑。按照我测试出来的结果,如果 username 这个 cookie 是 httpOnly 的话,它是应该不能再赋值的,也不会出现 Cookie 中还存在另外一个 key 为 username 的记录。


那是不是说添加了 httpOnly 之后,前端就不能通过 document.cookie 进行修改 cookie 的操作了?并不是。

这次不对 userId 这个 Cookie 赋值了,我随便写一个 document.cookie="test=123"。

//img.mukewang.com/szimg/5c9998680001c11409100437.jpg

//img.mukewang.com/szimg/5c99997900011fb611280214.jpg

会发现,Cookie 中多了一条 key 为 test 的记录。


综上所述,在 Set-Cookie 的时候,添加 httpOnly 确实对限制前端修改 Cookie 是起了作用了,但所起的限制仅仅对设置了 httpOnly 的记录有效。


回到你所提的问题,相同的 key 出现被覆盖的情况,那么是否有检查过 Cookie 对应记录 httpOnly 是否已经正确设置了?如果设置正确的话,应该是不会出现你所说的出现覆盖的情况。

3
0

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程