1. 程式人生 > 實用技巧 >使用者登入模組 - 5 勾選:記住使用者名稱

使用者登入模組 - 5 勾選:記住使用者名稱

JavaWeb綜合案例 - 使用者登入:6 勾選 - 記住使用者名稱

勾選後再次訪問顯示使用者名稱

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>使用者登入</title>
</head>
<body>



<form action="${pageContext.request.contextPath}/loginServlet" method="post">
    使用者名稱:<input type="text" name="username" value="${cookie.rememberMe.value}"><br>
    密碼: <input type="password" name="password"><br>
    記住使用者名稱: <input type="checkbox" name="rememberMe" value="yes"><br>

    <input type="submit" value="登入"><br>

    <div style="color: red">
        <%--顯示登入錯誤資訊--%>
        ${msg}
    </div>
</form>

</body>
</html>

LoginServlet

package com.itheima.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1. 設定請求編碼
        request.setCharacterEncoding("UTF-8");

        //2. 獲取使用者名稱和密碼
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //3. 判斷使用者名稱或密碼是否正確
        if ("jack".equals(username) && "1234".equals(password)) {
            // 登入成功了. 存入Session域中,可以在一次會話多次請求之間共享資料
            request.getSession().setAttribute("username", username);

            //---------記住使用者名稱  start-------------
            //1. 獲取是否勾選了"記住使用者名稱"
            String rememberMe = request.getParameter("rememberMe");
            //2. 判斷是否為 yes
            if("yes".equals(rememberMe)){
                // 勾選了
                Cookie rememberMeCookie  = new Cookie("rememberMe",username);
                rememberMeCookie.setMaxAge(7*24*60*60);
                response.addCookie(rememberMeCookie);
            }
            //---------記住使用者名稱  end-------------

            // 重定向: 瀏覽器位址列發生了改變,可以防止重複登入
            response.sendRedirect(request.getContextPath() + "/login.jsp");


            return;
        }

        // 登入失敗
        // 將錯誤資訊存入請求域中
        request.setAttribute("msg", "使用者名稱或密碼錯誤~");
        // 轉發到登入頁面,顯示錯誤資訊
        request.getRequestDispatcher("/login.jsp").forward(request, response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}