【4-2】设计实现用户登录时选择记住密码 这样下次登录即可不用再输入密码而直接进行自动登录

目录结构和数据库同上一篇文章

【4-2】设计实现用户登录时选择记住密码 这样下次登录即可不用再输入密码而直接进行自动登录

login.jsp(修复bug)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="java.sql.*,java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<%!public static final String dbDriver = "com.mysql.cj.jdbc.Driver";
    public static final String dbUrl = "jdbc:mysql://localhost:3306/demo0401?useSSL=false&serverTimezone=UTC";
    public static final String dbUser = "root";
    public static final String dbPass = "";%>
<%!public String getValueByCookieName(HttpServletRequest request, String cookieName) {
        Cookie info[] = request.getCookies();
        String cookieValue = "";
        if(info == null){
            return cookieValue;
        }
        for (int i = 0; i < info.length; i++) {
            if (cookieName.equals(info[i].getName())) {
                cookieValue = info[i].getValue();
            }
        }
        return cookieValue;
    }%>
<%!public Boolean valiCookieAndValue(HttpServletRequest request, String cookieName, String cookieValue) {
        Cookie info[] = request.getCookies();
        boolean flag = false;
        if(info == null){
            return flag;
        }
        for (int i = 0; i < info.length; i++) {
            if (cookieName.equals(info[i].getName()) && cookieValue.equals(info[i].getValue())) {
                flag = true;
            }
        }
        return flag;
    }%>
<%
    //获取数据库连接
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Class.forName(dbDriver); // 加载驱动程序
conn = DriverManager.getConnection(dbUrl, dbUser, dbPass); //连接
%>
<%
String r_username = "";
String r_password = "";
    //判断是否有Cookie信息
if (!("".equals(getValueByCookieName(request, "username")))) {
    //判断是否自动登录
    if ("on".equals(getValueByCookieName(request, "autoLogin"))) {
        out.print("<h1>已有登录信息 3s后自动跳转</h1>");
        response.setHeader("refresh", "3;url=success.jsp"); //客户端跳转 会将页面中程序执行完后再执行跳转
    }
    //判断是否记住密码
    if (valiCookieAndValue(request, "rememberMe", "on")) {
        r_username = getValueByCookieName(request, "username");
        r_password = getValueByCookieName(request, "password");
    }
}
%>
<%
    //接收表单数据 并存储Cookie信息
String username = request.getParameter("username");
String password = request.getParameter("password");
String rememberMe = request.getParameter("rememberMe");
String autoLogin = request.getParameter("autoLogin");
if (!(username == null || "".equals(username) || password == null || "".equals(password))) {
    String sql = "select * from user where username=? and password=?";
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, username);
    pstmt.setString(2, password);
    rs = pstmt.executeQuery();
    if (rs.next()) {
        //开始将用户名 密码 是否自动登录 是否记住密码的信息记录到cookie
        Cookie c_username = new Cookie("username", username);
        Cookie c_password = new Cookie("password", password);
        Cookie c_rememberMe = new Cookie("rememberMe", rememberMe);
        Cookie c_autoLogin = new Cookie("autoLogin", autoLogin);

        c_username.setMaxAge(60);
        c_password.setMaxAge(60);
        c_rememberMe.setMaxAge(60);
        c_autoLogin.setMaxAge(60);

        response.addCookie(c_username);
        response.addCookie(c_password);
        response.addCookie(c_rememberMe);
        response.addCookie(c_autoLogin);

        pstmt.close();
        conn.close();
        response.setHeader("refresh", "0;url=success.jsp"); //此处使用<jsp:forward page="success.jsp" />使用服务器端跳转的方式到成功页面 第一次获取不到cookie信息
%>

<%
}
}
%>
<body>
	<form action="login.jsp" method="post">
		用户名: <input type="text" name="username" value="<%=r_username%>"><br /> 密码:<input
			type="password" name="password" value="<%=r_password%>"><br /> <br /> 记住密码<input
			type="checkbox" name="rememberMe" id="rememberMe"> 自动登录<input
			type="checkbox" name="autoLogin" id="autoLogin"><br /> <br />
		<input type="submit" value="登录"> <input type="reset"
			value="重置"><br />
	</form>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>成功页面</title>
</head>
<%!public String getValueByCookieName(HttpServletRequest request, String cookieName) {
        Cookie info[] = request.getCookies();
        String cookieValue = "";
        if(info == null){
            return cookieValue;
        }
        for (int i = 0; i < info.length; i++) {
            if (info[i].getName().equals(cookieName)) {
                cookieValue = info[i].getValue();
            }
        }
        return cookieValue;
    }%>
<body>
	登录成功
	<br /> 你好,<%=getValueByCookieName(request, "username")%>
	<a href="logout.jsp">回到登录页面</a>
</body>
</html>

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注销</title>
</head>
<body>
<%
session.invalidate();
response.setHeader("refresh", "0;url=login.jsp");
%>

</body>
</html>

原创文章,作者:witersen,如若转载,请注明出处:https://www.witersen.com

(3)
witersen的头像witersen
上一篇 2020年10月28日 下午6:45
下一篇 2020年10月28日 下午6:55

相关推荐

  • 【9-1】实验九-表达式语言EL

    工程目录结构 以下为新版代码,之前的不完整且有bug 一、说明 新闻的添加、删除、审核、编辑都使用dao+servlet实现 页面数据的展示使用表达式语言 普通用户可以新增新闻,但…

    2020年12月5日
    1.5K2

发表回复

登录后才能评论

评论列表(1条)