菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
277
0

JAVAEE_Servlet_22_Cookie实现十天内免登录

原创
05/13 14:22
阅读数 74835

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>");
    
                      }
                  }
    
    
              }
          }

发表评论

0/200
277 点赞
0 评论
收藏
为你推荐 换一批