首页 文章

刷新后Safari 11 X-XSRF-TOKEN未更新

提问于
浏览
6

最近,Safari 11在Mac OSX上发布 . 此更新导致我们的web应用程序与我们的reuest标头上的XSRF结合使用时出现问题 . 我将尝试以逻辑方式描述问题 . 这就是好情况的样子:

  • 当用户想要登录时,他会从服务器收到一个响应,其中包含一个包含XSRF令牌值的Set-Cookie . Eg: Set-Cookie: XSRF-TOKEN=LKNBX4DZhL708KjXNkgXnlxTDCNuhsZG1kTc2SFy498; Path=/; Secure

  • 页面刷新下一个要执行的调用在 Headers 中包含正确的XSRF值 . 在服务器端,检查值等 . 来自前端的每个调用都将包含该XSRF令牌 .

  • 如果用户注销并想再次登录,则他的XSRF cookie将被新值覆盖,并且能够使用该令牌登录 .

我们的问题情况(在Mac OSX上使用Safari 11,其他浏览器不显示此行为):

  • 如果没有cookie存在,用户可以正常登录

  • 但是,如果他想重新登录(在上一个会话之后),则进行刷新 . 在第一次调用时,刷新其调用的XSRF令牌不会被新值替换,它们仍然包含来自前一会话的旧XSRF令牌 . 当我们检查此请求时,我们看到此请求中的cookie包含正确的值,但标头反映了旧令牌 .

  • 这个带有错误 Headers 的调用导致会话在后端关闭,因此用户被踢出会话 . TLDR;在Safari 11中, Headers XSRF-TOKEN在刷新后不会相应地更新cookie值 . 我们在旧版本和其他浏览器上使用它,我们认为这是一个Safar 11错误 .

还有其他人遇到过类似的问题吗?在Safari 11中刷新页面后,请求的标头值是否未更新?

EDIT: After testing we have discoverd that placing a timestamp in the URL as query parameter forces Safari 11 to send the correct request. It seems that some requests are cached and updated headers are ignored..

非常感谢!

1 回答

  • 1

    我无法评论您的令牌问题,但我也怀疑Safari 11存在缓存问题 . 最近,即使是指定的JSON请求

    Cache-Control: no-cache, private
    

    在从localhost重新加载页面2之后,Safari开始缓存这些请求(显示为 Cache (Disk) ) . firefox和chrome都没做 . 对我来说看起来像个错误?

相关问题