学HttpSessionBindingListener和HttpSessionListener时出现的问题(关于session)

参(照)考(抄)的代码
在运行HttpSessionListener的样例代码时,一切良好,如预期那样,打开一个会话新建了一个session,然后阔以登录n个账号。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
阔是到了使用HttpSesionBindingLister例子时,便出现了问题
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
发现用户不是增添的,而是直接被替代了?俺看着添加逻辑都是一样的

List onlineUserList = (List)application.getAttribute("onlineUserList");
        if(onlineUserList==null){
            onlineUserList = new ArrayList();
            application.setAttribute("onlineUserList",onlineUserList);
        }
        onlineUserList.add(this.username);

那就不是代码逻辑的问题。
接着俺想到会不会是session的问题由于使用同一个session,更新绑定值时便会删除之前存的值。

session.setAttribute("onlineUserBindingListener",
new OnlineUserBindingListener(userName));

使用俩浏览器看看。发现没问题了。
在这里插入图片描述
打印了同一个浏览器多网页的session值,发现果然是一样的。
在这里插入图片描述
然后再将OnlineUserBindingListener类中的valueUnbound方法的删除当前用户的代码注释掉并加入到logout.jsp中,发现结果与上例中一致了。

结论:

经过以上实验发现,由于同于在session中更新的Attribute,导致执行了解绑操作,所以一个浏览器便不可以同时登录多个账号。不过这一点正好也正是大多数正常应用场景所需要的。

(下面这篇谈三者之间区别的文章,俺感觉写得挺不错的。)
浅谈:request,session,application

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值