jsp 內置對象 登錄 cookie + session

概述

一共兩個頁面
當直接訪問產品列表的時候,會判斷用戶是否登錄,如果用戶沒有登錄,則直接3秒跳轉.
如果用戶登錄,則不進行跳轉
登錄頁面:對於登錄頁面來說,直接輸入用戶名,密碼.和數據庫進行對比,進行登錄.
並進行密碼的本地保存

ps 一般是需要對密碼加密進行本地保存的

代碼如下

配置文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>login</servlet-name>
    <jsp-file>/Login.jsp</jsp-file>
    <init-param>
      <param-name>driver</param-name>
      <param-value>com.mysql.cj.jdbc.Driver</param-value>
    </init-param>
    <init-param>
      <param-name>url</param-name>
      <param-value>jdbc:mysql://47.94.95.84:32786/test</param-value>
    </init-param>
    <init-param>
      <param-name>user</param-name>
      <param-value>test</param-value>
    </init-param>
    <init-param>
      <param-name>password</param-name>
      <param-value>**</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login.html</url-pattern>
  </servlet-mapping>
</web-app>

登錄界面

<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.DriverManager" %><%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-13
  Time: 下午10:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登錄頁面</title>
</head>
<form action="./login.html" method="post">
    <input type="text" name="username" id="username"/>
    <input type="password" name="password" id="password"/>
    <input type="submit" value="submit"/>
</form>
<script>
    // js腳本,讀取客戶端的cookie
    let cookie = {};
    let all = document.cookie;
    let list = all.split(";");
    for(let i = 0; i < list.length; i++){
        let p = list[i].indexOf("=");
        let space = list[i].indexOf(" ");
        let name = list[i].substring(space + 1, p);
        let value = list[i].substring(p+1);
        value = decodeURIComponent(value);
        cookie[name]=value;
    }
    // 填充到value
    if(cookie["flage"] == "true") {
        document.getElementById("username").setAttribute("value", cookie["user"]);
        document.getElementById("password").setAttribute("value", cookie["password"]);
    }
</script>
<body>
<%
    String dbdriver = config.getInitParameter("driver");
    String dburl = config.getInitParameter("url");
    String dbuser = config.getInitParameter("user");
    String dbpassword = config.getInitParameter("password");
    // 連接對象
    Connection connection = null;
    // 操作
    PreparedStatement preparedStatement = null;
    // 結果
    ResultSet resultSet = null;
    // 用戶id
    String mid = null;
    // 標誌位
    boolean falge = false;
    try{
        Class.forName(dbdriver);
        // 獲得連接
        connection = DriverManager.getConnection(dburl, dbuser, dbpassword);
        // 編寫sql驗證ID 密碼
        String sql = "SELECT mid FROM member WHERE name = ? AND password = ?";
        // 實例化操作對象
        preparedStatement = connection.prepareStatement(sql);
        // 設置查詢內容
        preparedStatement.setString(1, request.getParameter("username"));
        preparedStatement.setString(2, request.getParameter("password"));
        // 執行查詢
        resultSet = preparedStatement.executeQuery();
        // 如果可以查詢到,表示合法用戶
        if(resultSet.next()){
            mid = resultSet.getString(1);
            // 修改標誌位
            falge = true;
        }
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try{
            resultSet.close();
            preparedStatement.close();
            connection.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    // 判斷是否登錄成功
    if(falge){
        // 登錄成功
        // 保存session 保存cookie
        session.setAttribute("mid", mid);
        // 保存cookie
        Cookie cookieMid = new Cookie("mid", mid);
        Cookie cookieUser = new Cookie("user", request.getParameter("username"));
        Cookie cookiePassword = new Cookie("password", request.getParameter("password"));
        // 增加登錄態cookie
        Cookie cookieFlage = new Cookie("flage", "true");
        // 客戶端增加Cookie
        response.addCookie(cookieMid);
        response.addCookie(cookieUser);
        response.addCookie(cookiePassword);
        response.addCookie(cookieFlage);
        // 設置定時跳轉
        response.setHeader("refresh", "3;URL=product.jsp");
        %>
            登錄成功即將跳轉到首頁產品界面
            未跳轉點擊<a hre="./product.jsp">點擊此處</a>
        <%
    }else{
        // 查詢用戶是否已經登錄
        if(session.getAttribute("mid") == null) {
            Cookie cookieFlage = new Cookie("flage", "false");
            response.addCookie(cookieFlage);
        }
    }
%>
</body>
</html>

產品界面

<%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-14
  Time: 下午2:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
此爲商品列表
<script>
    // 判斷當前登錄態
    // js腳本,讀取客戶端的cookie
    let cookie = {};
    let all = document.cookie;
    let list = all.split(";");
    for(let i = 0; i < list.length; i++){
        let p = list[i].indexOf("=");
        let space = list[i].indexOf(" ");
        let name = list[i].substring(space + 1, p);
        let value = list[i].substring(p+1);
        value = decodeURIComponent(value);
        cookie[name]=value;
    }
    // 獲取登錄狀態
    if(cookie["flage"] != "true"){
        // 登錄狀態
        alert("請您登錄 3秒將會跳轉");
    }
</script>
<%
    // 服務器端驗證
    if(session.getAttribute("mid") == null) {
        // 執行頁面跳轉
        response.setHeader("refresh", "2;URL=/login.html");
    }
%>
</body>
</html>

注意

產品界面通過本地cookie和服務器的session進行雙向驗證.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章