登陆页面实现保存帐号密码功能

微信搜索【程序员囧辉】,关注这个坚持分享技术干货的程序员。

通过Cookie实现"记住我"的功能

1.登陆页面如下:

每个字段对应的属性name如下表:

 

用户帐号name
登陆密码password
验证码checkNum
记住我rememberMe

 

2.Action中的处理如下:

 

在用户第一次登陆后,进行Cookie进行处理

登陆处理

 

/**登陆*/
public String login() throws Exception{
	//处理验证码:判断验证码输入的是否正确
	boolean flag=VerificationCodeUtil.isCheckNum(request);
	if(!flag){
		this.addFieldError("checkNum", "验证码有误");
		return "loginUI";
	}
	User user=userService.findByLoginNameAndPassword(model.getName(),model.getPassword());
	if(user==null){
		addFieldError("login", "用户名或密码不正确");
		return "loginUI";
	}else{
		ActionContext.getContext().getSession().put("user", user);
		//处理Cookie
		addCookie(model.getName(),model.getPassword(),response,request);
		return "toIndex";
	}	
}

Cookie处理:

 

 

/**Cookie的实现	**/
private void addCookie(String name, String password,HttpServletResponse response, HttpServletRequest request) throws UnsupportedEncodingException {
	if(StringUtils.isNotBlank(name)&&StringUtils.isNotBlank(password)){
		//创建Cookie
		Cookie nameCookie=new Cookie("name",URLEncoder.encode(name,"utf-8"));
		Cookie pswCookie=new Cookie("psw",password);
		
		//设置Cookie的父路径
		nameCookie.setPath(request.getContextPath()+"/");
		pswCookie.setPath(request.getContextPath()+"/");
		
		//获取是否保存Cookie
		String rememberMe=request.getParameter("rememberMe");
		if(rememberMe==null){//不保存Cookie
			nameCookie.setMaxAge(0);
			pswCookie.setMaxAge(0);
		}else{//保存Cookie的时间长度,单位为秒
			nameCookie.setMaxAge(7*24*60*60);
			pswCookie.setMaxAge(7*24*60*60);
		}
		//加入Cookie到响应头
		response.addCookie(nameCookie);
		response.addCookie(pswCookie);
	}
}

 

 

3.JSP页面的处理如下:

在登陆的JSP页面中加入下面代码,以获得用户名和密码并自动填写:

 

<%
	String name="";
	String psw="";
	String checked="";
	Cookie[] cookies=request.getCookies();
	if(cookies!=null&&cookies.length>0){	
		//遍历Cookie
		for(int i=0;i<cookies.length;i++){
			Cookie cookie=cookies[i];
			//此处类似与Map有name和value两个字段,name相等才赋值,并处理编码问题 
			if("name".equals(cookie.getName())){
				name=URLDecoder.decode(cookie.getValue(),"utf-8");
				//将"记住我"设置为勾选 
				checked="checked";
			}
			if("psw".equals(cookie.getName())){
				psw=cookie.getValue();
			}
		}
	}
 %>


最后对用户名,密码,记住我字段添加value即可:

 

 

<TR>
 	<TD class="td">用户帐号:</TD>
 	<TD class="td"><input name="name" type="text" value="<%=name %>" id="name"/></TD>
</TR>
<TR>
	<TD class="td">登录密码:</TD>
	<TD class="td"><input name="password" type="password" value="<%=psw %>" id="password"></TD>
</TR>
<TR>
	<TD class="td">记住我:</TD>
	<TD class="td"><input name="rememberMe" type="checkbox" id="rememberMe" class="checkbox" <%=checked %>></TD>
</TR>

 

 

4.可能出现的问题

如果出现设置了却没有自动填写用户名和密码,则可能是地址的问题:

解决办法:

1.进入Internet选项,点击浏览历史记录一栏的设置

 

2.进入浏览记录设置后,点击查看文件

 

3.在弹出的文件夹里找到Cookie文件,名字为你的项目名+“/”,格式如下图,这个文件一般在文件夹的最后面,将此文件复制到桌面,注:此文件是无法直接在该文件夹里打开的。

 

4.如下图,第三行为保存项目工程的路径,此时在Action里的Cookie处理中,根据该地址设置对应的Cookie父路径即可,上文已经设置。

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,你的问题是如何采用SharedPreferences存储实现记住账号密码功能。下面是实现的步骤: 1. 在登录页面添加两个CheckBox,分别表示“记住账号”和“记住密码”功能。 2. 在登录按钮的onClick事件中,判断CheckBox是否被选中,如果是则调用saveAccountAndPassword方法保存账号和密码。 3. 在saveAccountAndPassword方法中,使用SharedPreferences实现数据的存储。具体实现代码如下: ```java private void saveAccountAndPassword(String account, String password, boolean isRememberAccount, boolean isRememberPassword) { SharedPreferences sharedPreferences = getSharedPreferences("account_password", MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); if (isRememberAccount) { editor.putString("account", account); } else { editor.remove("account"); } if (isRememberPassword) { editor.putString("password", password); } else { editor.remove("password"); } editor.apply(); } ``` 4. 在登录页面的onCreate方法中,读取SharedPreferences中保存的账号和密码,并将其设置到EditText中。具体实现代码如下: ```java private void initAccountAndPassword() { SharedPreferences sharedPreferences = getSharedPreferences("account_password", MODE_PRIVATE); String account = sharedPreferences.getString("account", ""); String password = sharedPreferences.getString("password", ""); boolean isRememberAccount = sharedPreferences.getBoolean("is_remember_account", false); boolean isRememberPassword = sharedPreferences.getBoolean("is_remember_password", false); if (isRememberAccount) { mAccountEditText.setText(account); mRememberAccountCheckBox.setChecked(true); } if (isRememberPassword) { mPasswordEditText.setText(password); mRememberPasswordCheckBox.setChecked(true); } } ``` 在上述代码中,is_remember_account和is_remember_password是用来记录CheckBox是否被选中的。 以上就是使用SharedPreferences实现记住账号密码功能的步骤,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员囧辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值