网站中对于记住账号密码,方便下次登录的使用非常普遍,那么它是怎么实现的呢?
首先他的流程是,设计一个复选框,当选中复选框时,就会传值到处理页面,复选框的用途就是判断用户是否愿意记住账号密码。
我们通过一个小例子来掌握他的实现步骤,在开始之前首先要了解一下实现这一功能的关键:
Cookie,所有的实现所依赖的都是cookie,那么什么是Cookie呢?
简单来说:cookie就是一段文本,它存储在客户端(通常来说是浏览器)。你可以把cookie当作一个map,里边是键值对,每个键值对有 过期时间、域、路径、脚本可否访问等属
性;客户端请求时,默认会带上cookie信息,就在http请求报文的header中;服务器响应时,可以设置cookie信息,就在http响应报文的header中;
了解了Cookie,我们就可以实现记住账号密码的功能了
首先,我们写一个login.jsp,来接收用户的操作。
<body>
<%
String username = "";
String password = "";
Cookie[] c = request.getCookies();
if (c != null) {
for (int i = 0; i < c.length; i++) {
if ("username".equals(c[i].getName())) {
username = c[i].getValue();
} else if ("password".equals(c[i].getName())) {
password = c[i].getValue();
}
}
} else {
username = " ";
password = " ";
}
%>
<div id="qq">
<form action="loginCheck.jsp" method="post">
<table>
<tr>
<td><input type="text" name="username" value="<%=username%>" />
</td>
</tr>
<tr>
<td><input type="password" name="password"
value="<%=password%>" />
</td>
</tr>
<tr>
<td>记住密码:<input type="checkbox" name="passcookies"
value="jizhu" />
</td>
<td><input type="submit" value="登录" />
</td>
</tr>
</table>
</form>
</div>
</body>
这段代码实现的思路是,首先搜索浏览器的Cookie,判断是否存在名为username和password,
如果有,就传值到form表单,用value="<%=username%>"来使他显示在输入框;而当搜索不到这套Cookie时,输入框不显示内容,需要用户手动输入。
这时我们需要一个登录信息处理的jsp,这里名字是loginCheck.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
LoginDaoImpl user = new LoginDaoImpl();
String username = request.getParameter("username");
String password = request.getParameter("password");
String remember = request.getParameter("passcookies");
if (!user.loginCheck(username, password)) {
out.println("<script>alert('error');</script>");
} else {
if (remember != null) {
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
c1.setMaxAge(1000);
c2.setMaxAge(1000);//这里设置保存这条Cookie的时间
response.addCookie(c1);//添加Cookie
response.addCookie(c2);
out.println("<script>alert('success and remember this username&password
');</script>");
} else {
out.println("<script>alert('success but not remember this username&password');</script>");
}
}
%>
</body>
这里的实现思路是首先接收登录界面传过来的值,首先判断用户名密码是否存在,不存在程序就终止了,弹出error提示,如果存在再判断用户是否选择了记住密码,即复选框是否有传值过来。如果有,new一个Cookie对象,对Cookie进行保存,如果没有则正常登录。
主要介绍记住账号密码的功能,后台实现思路不做详细介绍,代码如下
public class LoginDaoImpl implements LoginDao {
public boolean loginCheck(String username, String password) {
boolean result = false;
Connection conn = null;
PreparedStatement state = null;
ResultSet rs = null;
try {
conn = ConnHelper.getConn();
String sql = "select username from userinfo where username=? and password=?";
state = conn.prepareStatement(sql);
state.setString(1, username);
state.setString(2, password);
rs = state.executeQuery();
if (rs.next()) {
result = true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
state.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
}
这样,一个简单的使用Cookie记住账号密码的功能就实现了,同时可以扩展一下,比如,让用户自己选择记住账号密码的时长
表单中加上一个输入框:
<tr>
<td>记住密码时间:<input type="text" name="time" value="100" /></td>
</tr>
<td>记住密码时间:<input type="text" name="time" value="100" /></td>
</tr>
登录处理用输入的时间代替原来设置的值:
<body>
<%
request.setCharacterEncoding("utf-8");
LoginDaoImpl user = new LoginDaoImpl();
String username = request.getParameter("username");
String password = request.getParameter("password");
String remember = request.getParameter("passcookies");
int time = Integer.parseInt(request.getParameter("time"));
if (!user.loginCheck(username, password)) {
out.println("<script>alert('error');</script>");
} else {
if (remember != null) {
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
c1.setMaxAge(time);
c2.setMaxAge(time);
response.addCookie(c1);//添加Cookie
response.addCookie(c2);
out.println("<script>alert('success and remember this username&password 记住密码时长="
+ time + "');</script>");
} else {
out.println("<script>alert('success but not remember this username&password');</script>");
}
}
%>
</body>
使用Cookie可以完成很多事情,怎么用它,就要发挥大家想象啦!
安利一个,关注后端技术精选,号内回复“学习资料”,领取100套小程序源码+小程序开发视频和Java经典书籍电子版!