ufo22940268
V2EX  ›  问与答

关于浏览器缓存的问题

  •  
  •   ufo22940268 · Nov 29, 2016 · 1907 views
    This topic created in 3541 days ago, the information mentioned may be changed or developed.

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

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

    Cache-Control: max-age=3600
    

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

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

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

    我认为这种分用户动态的数据不适合如此粗暴地使用客户端缓存,应该使用 ETag 等手段
    dailiip
        5
    dailiip  
       Nov 29, 2016
    觉得四楼说得对
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3645 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:08 · PVG 13:08 · LAX 22:08 · JFK 01:08
    ♥ Do have faith in what you're doing.