利用HttpSession记录用户的登陆次数
来源:互联网 发布:sql某个值包含多个条件 编辑:程序博客网 时间:2024/05/03 13:57
场景:目前有两种登录方式,首先是人脸认证登录,如果累计认证失败三次,那么就将页面转发到用户名、密码登录的方式,所以这里就需要对当前用户登录失败的次数做统计,因为利用数据库再去存储这些信息很麻烦,要修改用户表的表结构,并且在达到峰值后需要清零,又要对数据库进行读写操作,这里使用HttpSession实现该功能,具体代码如下:
//用户登陆界面登陆验证成功将页面重定向到主页即可 @RequestMapping(value="/login", method = RequestMethod.POST) public String requestLogin(String username, String password, Model model, HttpSession session) { System.out.println("用户尝试登陆:" + session); Integer count = (Integer)session.getAttribute(session.toString()); System.out.println("获取的次数:" + count); User loginUser = userService.getUser(username, password); if(count == null||count==0) {//首次登录 if(loginUser==null) { session.setAttribute(session.toString(), 1); model.addAttribute("error", "您输入的账号或密码有误!已经错误" + session.getAttribute(session.toString()) + "次"); return "login"; } else { //登陆成功 model.addAttribute("loginUser", loginUser); return "redirect:index"; } } else if(count>=3){ //使用其他方式登陆 model.addAttribute("error", "你已登录3次失败,将为你转向传统登陆界面"); session.setAttribute(session.toString(), 0); return "face"; } else {//登录失败的次数属于1次或2次的情况 if(loginUser==null) { session.setAttribute(session.toString(), ++count); model.addAttribute("error", "您输入的账号或密码有误!已经错误" + session.getAttribute(session.toString()) + "次"); return "login"; } else { //登陆成功 model.addAttribute("loginUser", loginUser); return "redirect:index"; } }
以上记录的主要是后台的记录方式,在目前的项目中主要做的前台的判断,所以在前端的也提供了一共解决方案(两者不能共存!),前端主要针对的是ajax的请求的方式,所以在触发ajax请求外的地方定义一个变量来记录即可,由于ajax是针对局部刷新的动作,所以无法定义所谓的全局变量,只要把它定义到触发ajax请求的事件之外即可,本人项目中的用法如下:
//对用户认证次数统计 var count = 0; //进行用户人脸的认证 document.getElementById("rz").addEventListener("click", function () { //这里得到的就是Base64的编码方式, var imgData=document.getElementById("canvas").toDataURL("image/png"); //请求图片根据接口要求,去除前22位的文件头,即去除data:image/jpeg;base64, var data1=imgData.substr(22); $.post("http://localhost:8080/GasMonitor/verifyUser", { "image":data1 }, function(data){ //进行判断,分数大于80得分认为匹配成功 if(data.result[0]>80) { alert("认证成功,欢迎您!"); //ajax只能局部刷新,不能在调用的后台接口中进行页面跳转,只能在回调函数中进行跳转 window.location.href="${pageContext.request.contextPath}/index"; } else if(data.result[0]<=80&&data.result[0]>0) { if(count<3) { alert("认证失败,请重新认证!"); count++; console.info("count=" + count); } else { alert("您已认证失败3次,请使用用户名进行登录!"); window.location.href="${pageContext.request.contextPath}/login"; console.info("count=" + count); } } else { //这里检测不到人脸返回的json字符串将不带result的属性,这里后台是自己手动拼接了数值为0的result的属性添加进去 alert("认证失败,请保证面部清晰!"); count++; console.info("count=" + count); if(count<3) { alert("认证失败,请重新认证!"); console.info("count=" + count); } else { alert("您已认证失败3次,请使用用户名进行登录!"); window.location.href="${pageContext.request.contextPath}/login"; console.info("count=" + count); } } }, "json"); });
缺点:基于HttpSession的方式简单直接,但是在服务器集群部署的情况下session共享的方式是不适用的,因为下次请求不知道会转发到哪个机器上,此时Cookie就发挥作用了
阅读全文
0 0
- 利用HttpSession记录用户的登陆次数
- 记录登陆次数
- 记录登陆次数
- jsp利用session记录登陆状态,保证用户的使用连贯性,并且防止未登录用户绕过登陆页
- JS记录用户登录次数的代码
- asp.net mvc利用knockoutjs实现登陆并记录用户的内外网IP及所在城市
- asp.net mvc利用knockoutjs实现登陆并记录用户的内外网IP及所在城市
- cookie记录用户次数
- 利用root用户登陆的设置
- oracle如何记录用户的登陆信息
- JavaWeb_使用Servlet + HttpSession实现简单用户登陆
- centos 记录用户登陆
- JS记录用户登录次数
- jsp之记录用户登录的总次数以及记录用户最后一次登录的时间
- 如何用Javascript记录登陆次数
- 利用Cookie记录用户浏览的图片
- Centos查看用户登陆记录
- windows查看用户登陆记录
- 图- 拓扑序列- 判断图中是否有环
- DNS域名解析过程
- ping +域名 具体能做什么
- android JNI调用(Android Studio 3.0.1)
- php提高效率干货
- 利用HttpSession记录用户的登陆次数
- 良心博客滴滴开源框架VirtualAPK插件化介绍加教程加DEMO加投入项目
- Android拍摄照片横屏问题
- Windows下Qt5环境搭建
- 欢迎使用CSDN-markdown编辑器
- 安卓ShareSDK第三方登录与分享
- 浅谈Ajax
- Java 8 习惯用语,第 4 部分 提倡使用有帮助的编码
- Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 4171 异常的解决方法