最近,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 回答
我无法评论您的令牌问题,但我也怀疑Safari 11存在缓存问题 . 最近,即使是指定的JSON请求
在从localhost重新加载页面2之后,Safari开始缓存这些请求(显示为
Cache (Disk)
) . firefox和chrome都没做 . 对我来说看起来像个错误?