Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

localStorage的数据同步问题

  我一直提倡用localStorage代替Cookie来储存数据,之前还专门写了一篇来介绍他们的优缺点。但在使用localStorage代替Cookie时确实会遇到一些问题。因为localStorage不像Cookie一样可以设置超时,而服务器上的Session数据也不可能永久储存。
  比如服务器上的Session超时是3天,用户三天后再访问网页时,localStorage的数据依然存在,而服务器为用户存储的数据已经失效了。这就会造成前后端数据不同步。也许前端认为自己已经登陆,并没有显示出用户的登陆按钮,而后端则认为这是一个新访客,不传输用户数据。这是个很严重的问题。
  我们需要手动同步前后端的数据一解决这个问题。那么入手点就是如何让前端知道Session已经失效,这实际上并不困难。首先,在使用localStorage的时候顺便把当前Cookie中存储的SessionID记录下来。把Cookie的超时设置成和服务器端的Session超时一样就可以在服务器的Session超时时同步清除客户端储存的SessionID。这时服务器会认为客户的是一个新访客,重新分配一个SessionID。当前端的程序需要使用localStorage中的数据时,先检测之前保存的SessionID和当前的SessionID是否相同,如果不相同就说明Session已经超时,SessionID被重新分配,localStorage中的数据不能再使用了。
  这个做法是可行的,但前提是SessionID暴露给了客户端。实际上很多开发者为了防止XSS造成太大影响,喜欢使用HTTPOnly的方式来储存SessionID,这样前端就无法获取到SessionID了。实际上上面的做法并不要求获取到SessionID的真实值,只是需要一个标识符来辨别Session超时而已。只要在分配Session时给Cookie中写入一个用于表示Session是否超时的标识符,就不需要再使用SessionID了。所以这个做法是安全的。
网名:
54.226.58.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^