用redis来存储session时是否需要在readeSession和writeSession时加锁 [ 2.0 版本 ]
线上系统采用yii2-redis里的session来管理Session,因为源码未提供加锁的处理导致页面里多个ajax请求时,出现后面的ajax把前一个ajax里写入session的值覆盖掉了,而apache的文件存储session因为对文件加锁,所以不会出现这类问题,由此想问问大家在用redis的时候有没有必要加个锁(我遇到的问题可以通过改变ajax请求的顺序解决掉)。
遇到的场景:
1.加载页面完成,此时验证码是:1234
2.发送ajax请求局部页面,此页面里包含了新生成的图形验证码,例如此时验证码是:abcd。
3.发送ajax请求请求另一个数据,此数据是全局通用的,此时验证码被覆盖还原回1234。
4.第2步生成的局部页面中的图形验证码image标签请求图形验证码图片,获得的是1234。
解决办法思路:
1.改变ajax请求的顺序。
2.改变图形验证码的存储方式,与session分离,不放在session里。
3.对session加锁,避免session被覆盖重写。
问题:
1.有没有必要对session加锁
共 2 个回答
-
zhaohanfeng 回答于 2017-09-30 07:46 举报
使用场景是不是设计有点问题,同一个页面中不应该提供两个验证码吧,如果需要同时存在是否应该用不同的session名进行区分
共 1 条回复niqingyang 回复于 2017-09-30 09:41 回复只有一个验证码,只不过验证码是放在session里的,两个ajax去请求,第一个更新了验证码,第二个拿到的还是原来的那个,都写入session的时候,第二个就把新生成的覆盖掉了
niqingyang 河北省秦皇岛市
注册时间:2017-04-09
最后登录:2020-11-11
在线时长:4小时3分
最后登录:2020-11-11
在线时长:4小时3分
- 粉丝2
- 金钱105
- 威望0
- 积分145