用 token 代替 cookie, 在点超链接跳转的时候, 怎么把 token 附加到 request 里面

2016-11-04 21:23:29 +08:00
 wanganjun
新手, 之前学别人博客的东西用 cookie/session 做用户登录, 刚用 firebug 看了 cookie, 说说我看到的 cookie 的传递情况.

1. 在 login.html 页面, 点击登录以后, 服务器返回 cookie 并告诉浏览器需要请求 home.html
2. 浏览器自动在 request 中附加 cookie 并请求 home.html, 服务器把 cookie 解析成 session, 验证后返回 home.html 文件
3. home.html 加载完以后, 浏览器请求了一个 json 文件, 这个文件是公有的, 但是浏览器也自动附加了 cookie

在上面的过程里面, 用户登录以后, 浏览器会主动在每个请求中附加 cookie 好在需要的时候用于身份验证.

现在我用 token 代替 cookie, 怎么才能让浏览器也自动把 token 附加到 request 里面.
ajax 的请求可以手动附加 token, 但是 <a href="/xxx.html">, <form action="/xxx.html"> 和 location.href = 'xxx.html' 的怎么弄.

做出来的 json 接口既要支持桌面站点, 也要支持手机 app. 我想在有一个想法, 把 token 按照 cookie 的格式返回给客户端, 浏览器可以直接支持, 手机 app 解析 header. 不知道行不行.
19422 次点击
所在节点    Node.js
31 条回复
learnshare
2016-11-04 21:29:22 +08:00
token 保存在本地, cookie 是一个简单的位置
liuxey
2016-11-04 21:29:28 +08:00
浏览器不会把 token 自动加到请求里,因为这是你自己创建的东西,不属于 HTTP 协议的一部分,如果是为了学习,可以这么干,如果是为了使用,那完全没必要;

ajax 可以统一添加自然好,那页面中的各种 url 地址你必须要手动加上去,比如:<a href="/xxx.html?token=${token}">,你也可以想一些“聪明”的办法,让你更方便的加 token 在后面。

总之就是麻烦;
wanganjun
2016-11-04 21:31:35 +08:00
@liuxey 不想让 token 直接出现在 URL 里面...
ericls
2016-11-04 21:39:34 +08:00
不是 single page app ?
wanganjun
2016-11-04 21:42:27 +08:00
@ericls 手机上可以做单页应用, 但是现在要做桌面版
liuxey
2016-11-04 21:47:04 +08:00
@wanganjun 链接能带信息的只有三个地方:?后的参数, cookie ,请求 Header

cookie 不要, url 后面也不要,难道加 header ?这更不可能
paranoiagu
2016-11-04 21:48:14 +08:00
为什么不用 cookie 呢?
wanganjun
2016-11-04 21:48:59 +08:00
@liuxey 好吧
paranoiagu
2016-11-04 21:49:23 +08:00
basic authorized 是在 http 头的。
zjsxwc
2016-11-04 21:50:04 +08:00
业内常用做法是让客户端模拟浏览器发送 http 请求,也就 shi 一律都用 cookie ,也就不用你说的 token 了
ericls
2016-11-04 21:53:51 +08:00
@zjsxwc cookie 的内容可以就是一个 Token
ericls
2016-11-04 21:54:30 +08:00
Token 要取代的是 session 不是 cookie
wanganjun
2016-11-04 21:57:40 +08:00
@zjsxwc 恩, 好的, 谢谢了
Phant0m
2016-11-04 22:00:35 +08:00
token 存储在本地的 local storage 里
aprikyblue
2016-11-04 22:08:57 +08:00
拿 token 放在链接里小心 http referer 头的安全性问题。。
pynix
2016-11-04 22:33:08 +08:00
不是 spa 你搞什么 token
ericls
2016-11-05 05:51:30 +08:00
@pynix 还是有意义的 scale
ichou
2016-11-05 10:56:09 +08:00
用 header 头里的 authorized 字段是可以解决楼主的问题的
microchang
2016-11-05 11:04:15 +08:00
直接用 jquery 的 ajax 代理所有的 a 标签的网络请求,然后你想怎么玩就怎么玩了
freestyle
2016-11-05 22:04:16 +08:00
写个 js 函数,给网页上所有的 a 标签 href 属性加上 token.
https://gist.github.com/hanjm/2102fa5b40d01d0fe64311e37f4d3557

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

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

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

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

© 2021 V2EX