html本地缓存未查看信息,不同用户看到了相同的信息-一次web系统缓存问题的解决...
最近负责的系统总是出现奇怪的缓存问题,在这里简单记录一下碰到的问题和踩到的坑。
问题:用户反映使用不同账号A,B登录时,都出现账号A的页面信息(未邮寄账单提示)。如下所示:
图1:未邮寄账单提示
一 session缓存问题
鉴于之前也出现过类似的session缓存问题,session的key信息未清除。
如果A用户切换至B用户时,使用了不同的session key如‘U’,‘U_P’保存不同的信息,但是切换后只清除了'U'信息,忘记清除'U_P'信息,则可能导致A用户和B用户看到同样的‘U_P’信息。查看此处的代码也确实使用了seesion缓存:
图2:未邮寄账单session缓存
是不是这个原因引起的呢,之前的这个问题按说已经修复了,难道还有啥代码没改?查看代码,切换用户的时候移除了session的内容,登出账号的时候也失效掉了session信息。
图3:session清除
通过查看后台服务器日志,发现A用户登录后调用了/un-post-billls-GET链接,获取到了未邮寄账单信息。但是B用户的后台日志没有找到调用过后台的链接,所以排除了后台session缓存错误的可能。后台日志就不上图了,^_^。
二 浏览器本地缓存问题
由于B用户根本就没有调用后台服务,就拿到了未邮寄账单的信息,我们认为很大可能是浏览器本地缓存引起的问题。
1 Localstorage缓存
查看前端代码,在查询未邮寄账单信息时,使用了HTML5的window.localStorage来保存用户的信息,代码如下:
图4:localstorage缓存
并没有看到对localStorage的clear操作,这样可能是有问题的:A用户登录后在localstorage保存了未邮寄账单信息,切换至B用户后由于没有clear A用户的localstorage 信息。那么B用户就看到了A用户的本地缓存信息。
解决办法:在合适的时机清理localstorage,使用不同的key 保存缓存信息。
2 浏览器url缓存
这个bug是否就这样解决了呢?仔细看图4的localstorage代码,A用户和B用户实际上使用了不同的dataKey_A与dataKey_B来保存各自的localStorage,虽然说有一定的安全问题,但是由于不同的KEY存在,按道理说B用户不会看到A用户的未邮寄账单信息。问题可能不在localStorage这里。
根据 HTTP 规范,GET 用于信息获取,而且应该是幂等的。也就是说,当使用相同的URL重复GET请求会返回预期的相同结果。这个问题与现在的情况非常相似。
查看代码,使用了相同的URL请求重复GET:
图5:URL请求GET
解决办法:
1. GET请求URL后加随机数,让服务器认为不是相同的请求。
例 “/un-post-bills?t=” + new Date().getTime()
2. 使用POST代替GET,浏览器不会对POST做缓存
三 总结
WEB系统的缓存通常有好几级,本地缓存,服务器缓存,数据库缓存等。分析缓存问题时,要考虑每一层可能引起的问题,每一层的缓存技术也有很多种,要根据具体的场景来选择使用何种缓存技术。
缓存技术博大精深,本文只记录寻找bug时涉及的技术,其他有待学习。
html本地缓存未查看信息,不同用户看到了相同的信息-一次web系统缓存问题的解决...相关推荐
- 【安全资讯】“微信清粉”被爆非法获取用户信息,用户付费后,个人信息被出售
作者|蔚可云 来源|今日头条 发布时间|2021-11-07 图片来源:51CTO.com 微信好友加满了,想删掉一些联系人,又怕删错好友.好友把你删了,可他还躺在你的好友列表里. 基于这个需求,催生 ...
- App信息保护合规审核(个人信息保护政策)
APP信息保护合规审核 APP信息保护合规审核 用户信息收集.使用规则拨测 应用敏感权限过度申请拨测 APP侵权行为 APP信息保护合规审核判定规则细读 一.以下行为可被认定为"未公开收集使 ...
- web服务器缓存(二)
通过(一),我们学会了配置Apache的cache模块,测试了静态文件的缓存,静态文件成功被web服务器"捕获",生成了缓存文件,但是我们更关心的是动态文件,因为它比静态文件更加消 ...
- git服务器查看用户信息,git 查看当前git用户_新Git用户使用方法
git 查看当前git用户 This post is a tutorial for new users to set up git and clone and use the first reposi ...
- 我能查看Instagram 所有用户的私人邮件和生日信息
聚焦源代码安全,网罗国内外最新资讯! 尼泊尔研究员 Saugat Pokharel 公开了自己近期发现的一个 Instagram 漏洞的详情.如下是正文: 10月22日,正当我查看一些安全/隐私问题 ...
- ORACLE查看当前连接用户的权限信息或者角色信息
关于当前用户的相关信息,可以通过如下语句找到: 1 SQL> select * from all_objects where object_name like 'SESSION%'; 2 3 O ...
- Linux系统环境查看已经登录用户信息及管理
Linux属于多用户系统,root账户可以去查看现在登录的用户信息及其操作: 1.查看某一时刻用户的行为 w ROOT@LOCALHOST ROOT] # W 2:31PM UP 11 DAY ,21 ...
- linux如何查看所有的用户和组信息?
cat /etc/passwd cat /etc/passwd查看所有的用户信息,详情如下图 [步骤二]cat /etc/passwd|grep 用户名 cat /etc/passwd|grep ...
- Linux如何查看所有的用户和组信息
linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号.在使用linux操作系统时候,通常我们会遇到对多用户进行管理. 比如: 用户账号的添加 ...
最新文章
- python读音有道词典-有道词典命令行快速翻译,Python编程的利器
- python基础教程:startswith()和endswith()的用法
- java 计时_Breitling(百年灵)世界时间终极计时腕表
- ugui源码_UGUI整体解决方案基础篇(Unity 2019)
- JEECG寒假集训班开始报名啦!
- Visual SVN的安装
- 12306 被质疑过度获取用户隐私;直播答题外挂横行;阿里云辟谣称绝不做虚拟货币 | 一周业界事
- 关于Oracle针对中文的md5加密
- dsoframer java_dsoframer控件动态加载
- 中兴盒子B860AV2.1-A-B-M-U,通刷,线刷刷机固件
- java的运行环境是什么_Java运行环境是什么
- 电脑32位和64位是什么
- CMS漏洞(发货100CMS、SHECMS、ZHCMS、MACCMS)详解实战
- css动画怎么暂停,纯CSS代码实现动画的暂停与播放
- 前端获取本地ip和外网ip
- 导出Excel:合并单元格
- C++:乱码之字符串编码
- 湘潭大学计算机组成原理试卷,湘潭大学 计算机组成与原理 控制器实验 实验报告...
- 谷歌浏览器打开是搜狗浏览器怎么办?
- 基于kinect v2的模型三维重建算法(个人毕设总结)
热门文章
- 电脑开启防火墙后ping不通 及 开启防火墙后,不能远程的解决办法
- Error running ‘Tomcat‘: Unable to open debugger port (127.0.0.1:2148): java.net.SocketExceptio
- JAVA WEB篇3——JSP
- java ssh 那一层应该捕获异常_ssh经典异常!
- java获取http状态码_java获取Json和http状态码
- realtek audio console无法连接rpc服务_RPC服务在游戏中的简单运用
- 线程被中断跟被阻塞有什么区别_宠物加盟店跟自营店有什么区别
- Android日志[进阶篇]四-获取错误报告
- 存储ic载板_延伸IC领域 崇达技术拟将持有普诺威55%股权
- 采用推理的方法认知单词、CBOW模型