V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ufo22940268
V2EX  ›  问与答

关于浏览器缓存的问题

  •  
  •   ufo22940268 · 2016-11-29 09:58:56 +08:00 · 1500 次点击
    这是一个创建于 2923 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    Cache-Control: max-age=3600
    

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

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

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

    我认为这种分用户动态的数据不适合如此粗暴地使用客户端缓存,应该使用 ETag 等手段
    hqfzone
        5
    hqfzone  
       2016-11-29 16:04:46 +08:00
    觉得四楼说得对
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1041 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:17 · PVG 07:17 · LAX 15:17 · JFK 18:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.