tomcat 往session里面保存了属性后,在另一个线程中取出来发现取不到

发布于 2022-09-05 04:44:07 字数 1241 浏览 19 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文