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