关于浏览器缓存的问题

2016-11-29 09:58:56 +08:00
 ufo22940268

现在我在开发一个后台管理系统,里面的用户 token 我存在了 cookie 里面。

然后现在有一个请求 R1 我想进行缓存,所以我再请求返回头里面加上了

Cache-Control: max-age=3600

所以用户 A 在请求完 R1 之后,退出登录了,这时候用户 B 登录了,然后马上进行了一次 R1 请求。
这时候问题出现了,用户 B 这次请求直接在浏览器缓存里面拿数据了,因为请求的 url 是一样的,虽然 cookie 不一样。如果我希望用户 B 请求的时候不要去缓存里面拿的话,改怎么办呢?

1495 次点击
所在节点    问与答
5 条回复
sciooga
2016-11-29 10:07:48 +08:00
1. 好好考虑这个接口应不应该缓存,除了切换用户外还有修改密码后也有一样的问题。
2. 增加一个 get 参数,每次登录这个参数为一个新的值,之后使用同一个值可以使用缓存,换新的值缓存就无效了。
ufo22940268
2016-11-29 10:12:55 +08:00
@sciooga 谢谢,你的回答基本上解决了我的问题。换句话说用 max-age 就会有这个问题,所以我准备换用 s-maxage 来让 nginx 来进行缓存。

我还有一个问题是用户 token 这种信息是放在 cookie 里面好还是放在 url 的 query 里面好?
因为如果放在 cookie 里面,那么久没法用浏览器缓存了
sciooga
2016-11-29 10:55:11 +08:00
@ufo22940268 放在 cookie 里没有什么不妥,实际上常见也就三个位置 header 、 cookie 、 query 。缓存的控制弄不好会出现很多问题,你可以先这么做,所有的静态资源启用缓存, html 都不缓存,等你对这方面更熟悉了再回来考虑一下登录是否应该缓存这个问题。
otakustay
2016-11-29 13:46:35 +08:00
1. 使用 Vary: Cookie ,前提是你的服务器支持
2. URL 里直接加上 userId=xxx

我认为这种分用户动态的数据不适合如此粗暴地使用客户端缓存,应该使用 ETag 等手段
hqfzone
2016-11-29 16:04:46 +08:00
觉得四楼说得对

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

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

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

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

© 2021 V2EX