为了解决程序的并发问题(或者也没有解决....),所以限制登录的用户的唯一性是很有必要的下面贴一段代码来描述大致的程, 首先创建公共变量,用来储存所有登录的用户,
public static List<Integer> logonAccounts;
进入初始验证,设置其中的会话的失效时间,作用是若出现突发情况导致其中的页面崩溃时的紧急处理
System.out.println("进入初始验证"); request.getSession().setMaxInactiveInterval(60*30); if(logonAccounts==null){ logonAccounts = new ArrayList<>(); }
遍历list中所有的用户的数量,并将其与其中的登录的人相对比若其中有相同则跳转页面不允许登录,若没有则进行添加操作
if(user!=null) { for (int i = 0; i <logonAccounts.size() ; i++) { if(logonAccounts.get(i)==user.getUid()){ return "accounterror"; }else { } } logonAccounts.add(user.getUid());
退出时触发方法用来清除"我"登录过的痕迹
LoginUser loginUser= (LoginUser) request.getSession().getAttribute("loginUser"); if(logonAccounts==null){ logonAccounts = new ArrayList(); } logonAccounts.remove(loginUser.getUid());
return "ok";
前端我用的是谷歌浏览器,这个浏览器前端关闭页面时候触发beforeunload方法时不会进行弹窗,这是正常现象大家不要方
在关闭时页面时触发上面的清除痕迹的方法
$(window).bind('beforeunload',function() { var n = window.event.screenX - window.screenLeft; var b = n > document.documentElement.scrollWidth-20; if(b && window.event.clientY < 0 || window.event.altKey) { $.ajax({ url: "suddendropout.do", type: "post", success: function () { alert("您已退出登录"); } }); } else { $.ajax({ url: "suddendropout.do", type: "post", async: false, success: function () { } }); } });
千万别忘记加同步,嗯,不加的话关闭窗口的时候会出现问题,很伤
大体就是这样了,其他解决的办法就是用框架,这个我没用,还有后面用户顶掉前面用户,这两种方法还是有实现的方式的
可以看下