tomcat 往session里面保存了属性后,在另一个线程中取出来发现取不到
tomcat配置:使用memcached来管理session
我们项目有一个功能,就是在主页面有多个按钮,点击后都是location到同一个url,但是要实现打开的页面的内容不一样,并且要求链接中不能传参数,所以我们现在的做法是:
步骤一:点击按钮的时候ajax异步将参数发送到controller1,并保存到session中;
步骤二:在ajax请求返回成功之后location到那个页面;
步骤三:负责页面的那个controller2从session里面把参数拿出来,根据参数返回页面。
这个做法我看起来好像没毛病,但是最近我留意到,有bug,具体表现为:
前提:我现在有两个按钮A和B,分别应该打开pageA和pageB
操作:点击按钮A,进入到pageA,然后返回,点击按钮B,进入pageB
当我快速不断的循环执行以上操作时,偶尔会出现点击按钮B后进入到pageA页面的情况,或者点击按钮A进入到pageB页面的情况;
排查过程:
1.我在controller1往session里set属性之后,再次拿出来,是可以拿出来的,数值也正确
2.然后我在controller2从session中拿出对应的参数,发现是旧的,也就是说这个参数没有被更新,所以还是会返回上一次的页面
3.检查过sessionid,sessionid没有变化,并没有出现session丢失
4.我怀疑是不是属性被自动销毁了,然后我写了个监听器,发现出现bug的时候也没有任何属性被移除,添加操作一直都是成功的:
疑问:理论上这个过程是同步的呀,我的前端ajax是在controller1返回成功后才去把页面重定向到controller2的,这个bug在很多时候都不会出现,一般在我切换太快的时候,偶尔会出现,难道是因为使用了memcached来管理session的问题吗?我还没测过不使用memcached的时候会不会有这个问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论