服务器返回一个页面,该页面有一个隐藏的输入,其中包含一些用于未来AJAX请求的一次性CSRF令牌。 .onload
处理程序解析这些令牌并删除<input>
。当此人导航到外部网站然后使用“后退”按钮返回上一页时,会出现问题。浏览器使用页面的缓存版本,其中包含带有令牌的<input>
,这些令牌可能已经用完了。在提出请求之前,我无法检查它。
是否有一种可靠的方法,将一些数据传递给JavaScript变量,即使用户单击“返回”按钮进入页面,也只能保证执行一次?
我能想到的唯一解决方案是在页面加载时异步请求这些令牌,但是当一大块压缩内容是大量的短字符串时,对服务器进行往返是没有意义的。无论如何都要发送给用户。
答案 0 :(得分:1)
您可以使用localStorage并在其中放置一个标志,但旧浏览器可能存在兼容性问题。
本地存储:http://www.w3schools.com/html/html5_webstorage.asp
但你能做的最好就是按照你的说法询问服务器,发送短字符串并没有错,热门网站一直这样做。
答案 1 :(得分:1)
您可以尝试使用隐藏的form
,因为浏览器会保留表单数据,然后使用js来嗅探表单以检查页面是否“脏”。
这个答案中有一个很好的例子:https://stackoverflow.com/a/5642600/1759514