请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

6-5 一节中 cookie 限制

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 21:33:26

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

0 回复 有任何疑惑可以回复我~
  • 老师 这里没太明白  node先写了一个username=lisi给前端,还加了httpOnly,  后来浏览器端又加了一个username=aaa到cookie中,请求的时候username=lisi; username=aaa; 都带上了  但是验证生效的是username=lisi,是因为httpOnly起作用了,还是说node在解析的时候,因为key都是username ,所以lisi把aaa 给覆盖了,如果是覆盖的话怎么保证lisi覆盖aaa, 而不是aaa覆盖lisi
    回复 有任何疑惑可以回复我~ 2019-03-17 23:04:34
  • 双越 回复 不二西西 #2
    这里仅仅是演示了 nodejs 如何解析 cookie ,简单情况的演示,并没有考虑各种复杂的情况。目的是为了让大家了解到 cookie 是个什么东西。真正在实际应用中,不要用我这段代码,而是要用 express 或者 koa2 中处理 cookie 的插件,这些成熟的插件会兼容各种复杂情况。
    回复 有任何疑惑可以回复我~ 2019-03-18 09:46:15
  • 提问者 艾狄生 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-03-26 22:33:41
想个昵称真难 2019-03-26 11:18:55

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

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

//img1.sycdn.imooc.com//szimg/5c9990e5000194b213160299.jpg

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


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

//img1.sycdn.imooc.com//szimg/5c9992e00001b5fc12480266.jpg

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


再来看看加了 httpOnly 的情况:

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

//img1.sycdn.imooc.com//szimg/5c99941f0001ab4811890221.jpg

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

//img1.sycdn.imooc.com//szimg/5c999633000162f905600253.jpg

//img1.sycdn.imooc.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"。

//img1.sycdn.imooc.com//szimg/5c9998680001c11409100437.jpg

//img1.sycdn.imooc.com//szimg/5c99997900011fb611280214.jpg

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


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


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

3 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信