网站建设是不是要有营业执照,长沙网络销售公司,黄冈工程造价信息网,做电商网站一般需要什么流程最近负责的系统总是出现奇怪的缓存问题#xff0c;在这里简单记录一下碰到的问题和踩到的坑。问题#xff1a;用户反映使用不同账号A#xff0c;B登录时#xff0c;都出现账号A的页面信息(未邮寄账单提示)。如下所示#xff1a;图1#xff1a;未邮寄账单提示一 session缓…最近负责的系统总是出现奇怪的缓存问题在这里简单记录一下碰到的问题和踩到的坑。问题用户反映使用不同账号AB登录时都出现账号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信息。图3session清除通过查看后台服务器日志发现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图5URL请求GET解决办法1. GET请求URL后加随机数让服务器认为不是相同的请求。例 “/un-post-bills?t” new Date().getTime()2. 使用POST代替GET浏览器不会对POST做缓存三 总结WEB系统的缓存通常有好几级本地缓存服务器缓存数据库缓存等。分析缓存问题时要考虑每一层可能引起的问题每一层的缓存技术也有很多种要根据具体的场景来选择使用何种缓存技术。缓存技术博大精深本文只记录寻找bug时涉及的技术其他有待学习。