JAVAEE_Servlet_22_Cookie实现十天内免登录

时间:2021-02-02 15:00:13

Cookie实现十天内免登录

  • 代码:
   - CheckLogin 查看是否获取到了Cookie,如果获取到了连接数据库验证Cookie发过来的用户名和密码,如果没有获取到Cookie信息,那么就跳转到登录页

      import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*; public class CheckLogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //定义需要的变量
String userEmail=null;
String userPwd=null;
String userName=null;
boolean loginFlag=false; //获取浏览器提交给服务器的Cookie信息
Cookie[] cookies=request.getCookies(); //遍历Cookie数组
if(cookies!=null){
for (Cookie cookie:cookies) {
String cookieName=cookie.getName();
String cookieValue=cookie.getValue();
if(cookieName.equals("userEmail")){
userEmail=cookieValue;
System.out.println(userEmail);
}else if(cookieName.equals("userPwd")){
userPwd=cookieValue;
System.out.println(userPwd);
}
}
}else{
response.sendRedirect("/myWeb/login.html"); } if(userEmail!=null && userPwd!=null) {
//创建数据库连接对象
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null; try { // 连接数据库
Class.forName("com.mysql.cj.jdbc.Driver"); // 获取连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root", "123456"); // 获取预编译数据库操作对象
String sql = "select username,email,userpwd from t_userInfo where email=? and userpwd=?";
preparedStatement = connection.prepareStatement(sql); //给预编译语句传参
preparedStatement.setString(1, userEmail);
preparedStatement.setString(2, userPwd); //执行SQL语句
resultSet = preparedStatement.executeQuery(); //处理查询结果集
while (resultSet.next()) {
loginFlag = true;
userName = resultSet.getString("username");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally { //释放资源
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//设置字符集,获取字符输入流
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (loginFlag) {
//验证Cookie发过来的邮箱密码都正确
//HTML代码
out.print(" <!DOCTYPE html>");
out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
out.print(" <head>");
out.print(" <meta charset='UTF-8'>");
out.print(" <title>用户信息</title>");
out.print(" </head>");
out.print(" <body>");
out.print(" <h3 align='center'>登陆成功,欢迎" + userName + "</h3>");
out.print(" </body>");
out.print(" </html>");
} else { //登录失败
//HTML代码
out.print(" <!DOCTYPE html>");
out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
out.print(" <head>");
out.print(" <meta charset='UTF-8'>");
out.print(" <title>用户信息</title>");
out.print(" </head>");
out.print(" <body>");
out.print(" <h3 align='center'>密码错误,请重试");
out.print(" <a href='/myWeb/login.html'>重新登录</a>");
out.print(" </body>");
out.print(" </html>"); }
}
}else{
response.sendRedirect("/myWeb/login.html");
}
} }
  • 登录页, 获取用户在表单中输入的用户名和密码,连接数据库验证用户名和密码, 验证用户名和密码正确的话,继续验证用户是否勾选了免登录的复选框,如果勾选了,创建cookie,并将cookie发送给浏览器。

               package com.shige.controller;
    
          import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.*; public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //解决中文乱码问题
    request.setCharacterEncoding("UTF-8"); //获取用户提交的表单数据
    String userEmail=request.getParameter("email");
    String userPwd=request.getParameter("password");
    //创建数据库连接对象
    Connection connection=null;
    PreparedStatement preparedStatement=null;
    ResultSet resultSet=null;
    boolean loginFlag=false;
    String userName=null; try { // 连接数据库
    Class.forName("com.mysql.cj.jdbc.Driver"); // 获取连接
    connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
    "root","123456"); // 获取预编译数据库操作对象
    String sql="select username,email,userpwd from t_userInfo where email=? and userpwd=?";
    preparedStatement=connection.prepareStatement(sql); //给预编译语句传参
    preparedStatement.setString(1,userEmail);
    preparedStatement.setString(2,userPwd); //执行SQL语句
    resultSet=preparedStatement.executeQuery(); //处理查询结果集 while(resultSet.next()){
    loginFlag=true;
    userName=resultSet.getString("username");
    } } catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
    }finally { //释放资源
    if(resultSet!=null){
    try {
    resultSet.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(preparedStatement!=null){
    try {
    preparedStatement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } if(connection!=null){
    try {
    connection.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } if(loginFlag){
    //登录成功
    //登录成功够查看用户是否选择了自动登录的按钮
    String tenDayAutoLogin=request.getParameter("tenDayAutoLogin");
    System.out.println(tenDayAutoLogin);
    if("ok".equals(tenDayAutoLogin)){
    //说明用户勾选了十天内免登录的选项
    //创建Cookie对象
    Cookie cookie1=new Cookie("userEmail",userEmail);
    Cookie cookie2=new Cookie("userPwd",userPwd); //设置Cookie有效时间
    cookie1.setMaxAge(60*60*24*10);
    cookie2.setMaxAge(60*60*24*10); //设置Cookie关联路径
    cookie1.setPath(request.getContextPath());
    cookie2.setPath(request.getContextPath()); //将Cookie对象发送给浏览器
    response.addCookie(cookie1);
    response.addCookie(cookie2);
    }
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out=response.getWriter();
    //HTML代码
    out.print(" <!DOCTYPE html>");
    out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
    out.print(" <head>");
    out.print(" <meta charset='UTF-8'>");
    out.print(" <title>用户信息</title>");
    out.print(" </head>");
    out.print(" <body>");
    out.print(" <h3 align='center'>登陆成功,欢迎"+userName+"</h3>");
    out.print(" </body>");
    out.print(" </html>");
    }else{
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out=response.getWriter();
    //登录失败
    //HTML代码
    out.print(" <!DOCTYPE html>");
    out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
    out.print(" <head>");
    out.print(" <meta charset='UTF-8'>");
    out.print(" <title>用户信息</title>");
    out.print(" </head>");
    out.print(" <body>");
    out.print(" <h3 align='center'>密码错误,请重试");
    out.print(" <a href='/myWeb/login.html'>重新登录</a>");
    out.print(" </body>");
    out.print(" </html>"); }
    } }
    }