大家都知道pc端在系统登录时有一个类似于【记住我】的功能 ,做开发半年我没有接触过cookie,觉得可能很难,今天刚好自己抽几分钟时间学习了一下,发现很基本,在这里也就算给一些学习者写一个实现方法吧,分享出来大家批评指教:
登录页面,记住我复选框
<td>
<input type="checkbox" name="remeberMe" id="remeberMe" value="yes"/>
</td>
首先登录需要用户名和密码,创建一个vo对象 MenuForm
public class MenuForm {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第二步,登录的Action中获取到页面传递的用户名和密码,并调用记住我的方法:
public String menuHome(){
//获取用户名和密码
String name = menuForm.getName();
String password = menuForm.getPassword();
/** 其他方法事件*/
/**记住我*/
LogonUtils.remeberMe(name,password,request,response);
}
第三步:Action代码的处理,创建LoginUtils类
public class LogonUtils {
/**记住我功能*/
public static void remeberMe(String name, String password,
HttpServletRequest request, HttpServletResponse response) {
//1:创建2个Cookie,存放指定值
Cookie nameCookie = new Cookie("name",name);
Cookie passwordCookie = new Cookie("password",password);
//2:设置Cookie的有效路径(指定当前项目)
nameCookie.setPath(request.getContextPath()+"/");
passwordCookie.setPath(request.getContextPath()+"/");
//获取页面复选框的值(用作判断)
String remeberMe = request.getParameter("remeberMe");
//此时表示复选框选中
//3:设置Cookie的有效时间(1周)
if(remeberMe!=null && remeberMe.equals("yes")){
nameCookie.setMaxAge(7*24*60*60);
passwordCookie.setMaxAge(7*24*60*60);
}
//此时表示复选框没有被选中
else{
nameCookie.setMaxAge(0);
passwordCookie.setMaxAge(0);
}
//4:将Cookie存放到response中
response.addCookie(nameCookie);
response.addCookie(passwordCookie);
}
}
第四步:在index.jsp页面中读取Cookie中的数据,jsp中嵌套java代码
<%
String name = "";
String password = "";
String checked = "";
Cookie [] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie cookie:cookies){
if(cookie.getName().equals("name")){
name = cookie.getValue();
checked = "checked";
}
if(cookie.getName().equals("password")){
password = cookie.getValue();
}
}
}
%>
这样的缺点:将java代码放置到jsp上,要求jsp先要执行编译java代码,然后再执行。效率会降低。
分析:在跳转到index.jsp页面之前先从Cookie中获取数据,放置到HttpRequest对象中进行显示,这样可以使用过滤器(filter)完成,过滤器在这因为时间原因就暂时不写了。谢谢!