引言:在这样的一个业务场景下,进入到网站登录账号要求记住账号和密码,用户退出之后,浏览器能够记住用户的账号和密码,下次登录网站不需要输入账号和密码就能够登录账号。
那么如何做呢?那就是使用Cookie保存这次的会话信息,也就是登录过一次之后,几天内无需在输入账号和密码,实现3天免登录的功能。
Cookie是客户端(一般指浏览器)请求服务器后服务器发给客户端的一个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,服务器就可以通过这个标识来识别客户端的身份或状态等。
以下是login.jsp的代码
三天免登录
${msg }
立即登录
1.以下是User实体类的代码
public class User { private Integer id;//主键 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User() { super(); } private String username;//用户名 private String password;//密码 public User(Integer id, String username, String password) { super(); this.id = id; this.username = username; this.password = password; } }
2.UserDao代码和实现类
//接口
package edu.school.dao;
import edu.school.bean.User;
public interface UserDao {
User queryUserByUsernameAndPassword(String username,String password);//根据用户名和密码来登录
}
3.UserDaoImpl实现类,操作数据库的
package edu.school.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import edu.school.bean.User; import edu.school.dao.UserDao; import edu.school.utils.DbConn; public class UserDaoImpl extends DbConn implements UserDao { Connection conn= DbConn.getConnection();//数据库连接 public User queryUserByUsernameAndPassword(String username, String password) { User record=null; try{ String sql="select * from user where username=? and password=?"; PreparedStatement pst=conn.prepareStatement(sql); pst.setString(1, username); pst.setString(2, password); ResultSet rs=pst.executeQuery(); if(rs.next()==false){ return null; }else{ record=new User(); record.setId(rs.getInt("id")); record.setUsername(rs.getString("username")); record.setPassword(rs.getString("password")); } }catch(Exception e){ e.printStackTrace(); } return record; }
4.UserService和UserServiceImpl类
service是业务层,业务层将dao层封装,用于LoginServlet进行调用
//接口 package edu.school.service; import edu.school.bean.User; public interface UserService { /* 登录,返回null,表示登录失败,返回有个值,表示登陆成功。 */ public User login(User user); }
5.UserServiceImpl是对UserService的实现类
package edu.school.service.impl; import edu.school.bean.User; import edu.school.dao.UserDao; import edu.school.dao.impl.UserDaoImpl; import edu.school.service.UserService; public class UserServiceImpl implements UserService { private UserDao dao=new UserDaoImpl(); public User login(User user) { // TODO Auto-generated method stub return dao.queryUserByUsernameAndPassword(user.getUsername(), user.getPassword()); } }
6.LoginServlet代码
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private UserService service=new UserServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);//仍然执行doPost方法
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");//获取用户名
String password = request.getParameter("password");//获取密码
String check=request.getParameter("che");//是否选择免登录
//处理业务
//1:判断是否选择三天免登录
User user = service.login(new User(null,username,password));
if (user == null) {//如果用户不存在
request.setAttribute("msg","用户名或者密码错误");
System.out.println("用户名或者密码错误");
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
} else { //如果用户存在且密码正确则进行将用户的信息保存
if(check!=null&&"yes".equals(check)){
System.out.println(check);
Cookie cookie1=new Cookie("username",URLEncoder.encode(username,"utf-8"));
Cookie cookie2=new Cookie("password",URLEncoder.encode(password,"utf-8"));
//设置cookie的有效期为3天,如果7天则保存为7
cookie1.setMaxAge(60*60*24*3);
cookie2.setMaxAge(60*60*24*3);
response.addCookie(cookie1);
response.addCookie(cookie2);
request.getSession().setAttribute("user", user.getUsername());
request.getRequestDispatcher("main.jsp").forward(request, response);
System.out.println("登陆成功");
}else{
request.getSession().setAttribute("user", user.getUsername());
request.getRequestDispatcher("main.jsp").forward(request, response);
}
}
}