现在还有用 cookies 吗

2020-07-22 12:14:49 +08:00
 pabno

接手公司的老项目,很多安全和身份相关的功能都是用 cookies 实现的。这玩意儿感觉既不好测试又不安全,以往都是使用 token 来做的身份安全相关

不知道现在在 web 端主流是用 cookies 还是 token ?

11382 次点击
所在节点    程序员
104 条回复
pabno
2020-07-23 00:49:43 +08:00
@daimubai 是的,我表述不太对。以往的项目都是 spa 应用,加上有 app,所以都是采用 Authorization header 的方式,感觉用起来挺舒服的,今天才知道 localstore 是不能跨子域名的
laike9m
2020-07-23 08:14:13 +08:00
@kop1989 #21 233
ChanKc
2020-07-23 08:21:46 +08:00
@pabno Authorization 也是标准的 header 了,这个前端也是比较好做的,不过存储的问题还是有
ChanKc
2020-07-23 08:36:43 +08:00
@pabno 不能跨域其实是个好东西。local storage 不能跨域是对的,要不然别的网站脚本都能读你的网站的存储了。cookie 也是可以做到不跨域的,SameSite 了解一下。
xuanbg
2020-07-23 08:39:24 +08:00
和 cookie 对标的怎么成了 token ?难道不应该是 localstore 吗?和 token 相同功用的是 session 好不好……

做前端这都搞不清,果然是娱乐圈……
iyangyuan
2020-07-23 08:42:18 +08:00
两者既没有本质区别,又不是一回事
ChanKc
2020-07-23 08:42:47 +08:00
cookie 跨域了所以会容易 csrf 啊
xuanbg
2020-07-23 08:44:35 +08:00
@inktiger token 不需要存储啊,放内存里面就挺好。
ChanKc
2020-07-23 08:54:12 +08:00
@xuanbg 页面一关就失效,同域名多标签页就失效
iyu90
2020-07-23 09:38:39 +08:00
@xuanbg 他是 java 狗,前端莫名其妙躺枪
xuanbg
2020-07-23 09:43:41 +08:00
@ChanKc 一般用 token 的都是后台管理应用,spa 就行。这些问题也就不存在啦。
sampeng
2020-07-23 09:56:49 +08:00
我最没力吐槽的就是说的 cookie 的缺陷。做服务端的都不认为是缺点。
你要是专职前端我也要一条一条反驳:
1,谁告诉你只有 web 和浏览器支持? app 不支持数据写 app 的不懂 cookie,只知道依葫芦画瓢用 token 。所有 http client 都留了一个客户端的 cookie store 接口是为啥的?只是很少有人注意和实现
2,不要把客户端和服务端要保存的状态混为一谈。服务端最多要存个 session id 。其他你说的都是傻子才用 cookie 传。这条根本不成立
3,cookie 导致 crsf ? wtf ?说的好像放参数和 header 就不行了。crsf 归根结底是服务端设计消息传递和状态传递不严谨。放 header 会更简单…
4,不要自己不懂就说是缺点。血泪教训是你不懂导致的。我不会开飞机是不是也成了缺点呢?有时间吐槽所谓血泪教训,为什么不去看看 cookie 得完整 rfc ?

另外说一点,鉴于你说的这么肤浅,估计你都没考虑过,token 放 header 传输真心是 app 整出来的复合 http 认真协议。但是浏览器上一旦发生跨域请求的时候,如果服务端不做额外设置,浏览器无论如何会发两次请求,一次 option,请求询问是否可以用这个 header 头。
youxiachai
2020-07-23 10:47:00 +08:00
app 请求 header 带 cookie 不是蛮普遍的吗.....为啥不会用...很好奇.lz 怎么想的...
youxiachai
2020-07-23 10:50:16 +08:00
@vone lz 是学 java 的,你喷歪了...
youxiachai
2020-07-23 10:52:10 +08:00
老实说..一个做后端的..不认真看一遍 RFC 标准.....不知道怎么吐槽..
chairuosen
2020-07-23 10:58:39 +08:00
cookie 不符合后端只负责 api 服务的前后分离的职责设计,属于为前后不分离时期制定的标准,同理还有 301/302 Location 字段。

前后分离的设计,传输接口只有内容,没有行为,行为完全由前端控制,Set-Cookie Location 等带有行为的 http header 就不应该出现。
ChanKc
2020-07-23 11:34:25 +08:00
@sampeng 我有些问题想请教
csrf 归根结底是服务端设计消息传递和状态传递不严谨,这个怎么说
另外你说的 Option 请求应该是 CORS-preflight request 吧。我感觉这个不是每次都会发生的,因为可以用 CORS-preflight cache 此外还有 use-CORS-preflight flag form 表单跨域的时候好像也不会请求
ChanKc
2020-07-23 11:36:05 +08:00
@xuanbg 公司有些内部系统就是这样的,我总是习惯鼠标滚轮按下去在新标签页打开,因为有时候喜欢切换着不同标签页看。每次都不行,非常难受
OHyn
2020-07-23 11:52:19 +08:00
cookie 好用,但是写 cookie 的时候要注意一下 sameSite 的配置问题,chrome > 80 的版本,没带 sameSite = none 的话跨站请求带 cookie 会被拦截掉,这个还要添加 Secure 。还有某些老版本浏览器下 sameSite = none 会被识别成 Strict,要检查一下 userAgent,浏览器兼容性问题终于能折磨后端了。
EminemW
2020-07-23 14:19:25 +08:00
我理解的 cookie 只是前端 存东西的地方。。token 是 session 的一种实现方式。。 不知道有没有错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692155

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX