现在我在开发一个后台管理系统,里面的用户 token 我存在了 cookie 里面。
然后现在有一个请求 R1 我想进行缓存,所以我再请求返回头里面加上了
Cache-Control: max-age=3600
所以用户 A 在请求完 R1 之后,退出登录了,这时候用户 B 登录了,然后马上进行了一次 R1 请求。
这时候问题出现了,用户 B 这次请求直接在浏览器缓存里面拿数据了,因为请求的 url 是一样的,虽然 cookie 不一样。如果我希望用户 B 请求的时候不要去缓存里面拿的话,改怎么办呢?
1
sciooga 2016-11-29 10:07:48 +08:00 via Android 2
1. 好好考虑这个接口应不应该缓存,除了切换用户外还有修改密码后也有一样的问题。
2. 增加一个 get 参数,每次登录这个参数为一个新的值,之后使用同一个值可以使用缓存,换新的值缓存就无效了。 |
2
ufo22940268 OP @sciooga 谢谢,你的回答基本上解决了我的问题。换句话说用 max-age 就会有这个问题,所以我准备换用 s-maxage 来让 nginx 来进行缓存。
我还有一个问题是用户 token 这种信息是放在 cookie 里面好还是放在 url 的 query 里面好? 因为如果放在 cookie 里面,那么久没法用浏览器缓存了 |
3
sciooga 2016-11-29 10:55:11 +08:00
@ufo22940268 放在 cookie 里没有什么不妥,实际上常见也就三个位置 header 、 cookie 、 query 。缓存的控制弄不好会出现很多问题,你可以先这么做,所有的静态资源启用缓存, html 都不缓存,等你对这方面更熟悉了再回来考虑一下登录是否应该缓存这个问题。
|
4
otakustay 2016-11-29 13:46:35 +08:00
1. 使用 Vary: Cookie ,前提是你的服务器支持
2. URL 里直接加上 userId=xxx 我认为这种分用户动态的数据不适合如此粗暴地使用客户端缓存,应该使用 ETag 等手段 |
5
hqfzone 2016-11-29 16:04:46 +08:00
觉得四楼说得对
|