之前做过cookie实现记住密码,这次换成session记住密码又做了一遍,有很多收获。
本次博客分为两部分。一部分是cookie和session的区别(面试经常被问道);另一部分是sesion实现记住密码,在Jsp页面和Controller页面的代码编写。
区别:
1.cookie是浏览器端技术;将数据保存到浏览器中,不安全;不可以保存中文保存时编码: URLEncoder.encode();取值时解码:URLDecoder.decode();。
2.session是服务器端技术;将数据保存到服务器中,当访问servlet时,服务器创建session对象同时会向浏览器写入一个sessionId保存到cookie中,当浏览器关闭,session里面的数据没有删除,而是保存sessionId的cookie丢失因此找不到数据,安全。
相同:
两者作用范围都是一次会话(浏览器开启到关闭)有效。
分为3步。
1.jsp页面布局
默认rem选择框是选中状态
<form name="register" action="login.action" method="post"> <div class="form_row"> <label class="contact"><strong>Phone:</strong></label> <input type="text" class="contact_input" name="uPhone" id="uPhone" value="${param.uPhone }" onblur="phoneBlur(this.value);"/> <span id="uPhoneMsg"></span> </div> <div class="form_row"> <label class="contact"><strong>Pwd:</strong></label> <input type="text" class="contact_input" name="uPwd" id="uPwd"/> <span id="uPwdMsg">${flag }</span> </div> <div class="form_row"> <div class="terms"> <input type="checkbox" name="rem" id="rem" checked="checked">记住密码 <!-- <input type="checkbox" name="terms" id="terms"/> Rember me --> </div> </div> <div class="form_row"> <input type="submit" class="register" value="login" /> </div> </form>
2.controller层逻辑处理
我的代码有两处用到session,这里只看第二处即可。
//2.登录按钮按下后 当rem被选中,且密码正确时,将账号密码这个对象存入session
//5.1登录 @RequestMapping("login") public String login(String uPhone,String uPwd,String rem,Model model,HttpServletResponse response,HttpServletRequest request){ HttpSession session = request.getSession(); String flag = "1"; String uId = us.selectUsersByPhone_PwdService(uPhone, uPwd); //判断如果账号密码不存在 返回登录页面;存在,跳转到首页 if(uId==null){ flag="密码错误"; request.setAttribute("flag", flag); return "register"; }else{ Users u1 = us.selectUsersByIdService(uId); //1.只要登录成功 就将users对象存入session中,为之后的过滤器使用 session.setAttribute("handlerInterceptorSession", u1); //2.登录按钮按下后 当rem被选中,且密码正确时,将账号密码存入session if(rem.equals("on")){ Users u2 = new Users(uPhone,uPwd); session.setAttribute("remSession", u2); } return "index"; } }
3.jsp页面补充
这里主要看//5.当光标离开后调用记住密码的功能
逻辑是:用户输入账号光标离开后,从session中取值,如果账号在session中存在,则获取账号对应的密码,将密码赋值给输入框。(前提是:rem选择框是选中状态,在1.jsp页面布局里面就设置好了)
<script> function phoneBlur(uPhone){ var phoneMsg = document.getElementById("uPhoneMsg"); phoneMsg.innerText=""; $.ajax({ type:"post", url:"phoneExist.action", data:{"uPhone":uPhone}, dataType:"text", /* 当flag =0 提示用户不存在 当flag = 1 普通用户 */ success:function(flag){ if(flag==0){ phoneMsg.innerText = "请先注册"; } } }) //5.当光标离开后调用记住密码的功能 remPwd(uPhone); }; //5记住密码 /*1.当phone光标离开后 当rem被选中 从Remsession里面遍历,获取账号对应的密码。 */ //alert($("#rem").val()); function remPwd(uPhone){ //每次进入 密码先清空 $("#uPwd").val(""); var remVal = $("#rem").val(); if(remVal=="on"){ //第一次登录会报异常,所以加"" var sessionPhone= ${remSession.uPhone}+""; var sessionPwd= ${remSession.uPwd}+""; //当账号在session中可以查询到,就将session中的密码赋值给输入框pwd if(sessionPhone==uPhone){ $("#uPwd").val(sessionPwd); } } } </script>
至此,session存储Users对象实现记住密码功能完毕,更多相关Java session记住密码内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍Android sharedPreferences实现记住密码功能,包括了Android sharedPreferences实现记住密码功能的使用技巧和注意事项,需要的朋友参考一下 实现记住密码功能,供大家参考,具体内容如下 编写界面交互代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
不少网站在登录界面会提供“记住密码”这样一个勾选项,方便用户省去输入账号密码,以实现网站的快速登录。 传统的“记住密码”功能主要有两种实现方式: cookie存储登录信息 浏览器自动填充登录信息 cookie存储登录信息 直接利用 cookie 存储用户的用户名和密码是非常不安全的,攻击者可以通过各种漏洞访问到 cookie 从而导致用户密码泄露(常见的安全漏洞)。 常用做法是,当用户登录成功时,
本文向大家介绍JavaWeb 中Cookie实现记住密码的功能示例,包括了JavaWeb 中Cookie实现记住密码的功能示例的使用技巧和注意事项,需要的朋友参考一下 本文主要内容: •1、什么是Cookie •2、Cookie带来的好处 •3、Cookie的主要方法 一、什么是Cookie cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。Cookie的目的就是为用户带来
本文向大家介绍Android SharedPreferences实现记住密码和自动登录,包括了Android SharedPreferences实现记住密码和自动登录的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android SharedPreferences实现记住密码和自动登录,供大家参考,具体内容如下 效果图: 第一次进入进来 勾选记住密码和自动登录成功后,第二次进来 说
上一节我们介绍了Session管理器的实现原理,定义了存储session的接口,这小节我们将示例一个基于内存的session存储接口的实现,其他的存储方式,读者可以自行参考示例来实现,内存的实现请看下面的例子代码 package memory import ( "container/list" "github.com/astaxie/session" "sync"
本文向大家介绍Mysql存储java对象实例详解,包括了Mysql存储java对象实例详解的使用技巧和注意事项,需要的朋友参考一下 Mysql存储java对象 MySQL 设置字段为 blob 保存对象,先将对象序列化为byte[] 使用 setObject(byte[] bytes) 获取对象 使用getBytes(),将获取的byte[]反序列化为Java 对象 网上的其他方式会有各类问题