cookie session 和登錄驗證


cookie、session 簡單理解

cookie 和 session 的目的是追蹤用戶會話,標識用戶,讓服務器知道是誰在訪問網站.

cookie 是保存在客戶端的用戶信息,在瀏覽器首次訪問服務器時由服務器創建並發給客戶端。瀏覽器收到cookie后會根據cookie時效,選擇將cookie內容保存在內存或硬盤。當瀏覽器再次訪問服務器是會在請求中攜帶cookie。

session 是保存在服務端的用戶信息,服務器為每個會話創建一個session,session里面可以保存用戶信息,session是通過以cookie的方式發送session ID 給客戶端作為標識。來識別用戶。而瀏覽器每次訪問都會攜帶session ID

所以當cookie被禁用時也會導致session不可用。通常情況下,服務器是通過session保存用戶登錄信息,驗證用戶是否登錄。那么當cookie不可用時,如何驗證用戶登錄?
一般有下面幾種方法:
1 URL重寫
response對象有一個encodeURL(String URL)方法.可以自動的給url添加session ID 后綴,以提交參數的方式攜帶session ID
例如:

String newURL = response.encodeURL("/cart/ProductList");
print(newURL) -> /cart/ProductList;jsessionid=110E31172D5630A31E296D40730B3521

這樣,服務器發給瀏覽器的page里的link都如此處理。那服務器也能確認用戶。

2 form 表單隱式提交
3 http協議攜帶

用戶登錄實現

用戶登錄邏輯:用戶從登錄頁面提交登錄信息,驗證通過就跳轉到welcome頁面,不通過就回到登錄頁面,並提示信息錯誤。 使用sision保存用戶登錄信息,如果cookie被禁用,就使用url重寫技術
login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>login</title>
</head>
<body>
<h1>登錄</h1>
<form action="login" method="post">
    name: <input type="text" name="name">
    password: <input type="password" name="password">
    <input type="submit" value="login">     
    <input type="button" value = "注冊" onclick="/cart/register">
</form> 
<!--提示登錄錯誤信息-->
<p>${warning}</p>

</body>
</html>

LoginServlet.java

package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DAO.UserDAO;
import bean.User;

/** * Servlet implementation class Login */
@WebServlet("/Login")
public class LoginServlet extends HttpServlet {

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

        //獲取客戶端傳遞的參數
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        //查數據庫
        User user = new UserDAO().getUser(name,password);

        if(user == null){
            request.setAttribute("warning","user name or password is wrong");
                   request.getRequestDispatcher("/login.jsp").forward(request,response);
        }else{

            //session要占用服務器內存,所以服務器不會默認創建(沒有設置的話jsp會創建一個session對象(jsp隱式對象之一))
            //沒有創建session的話 encodeURL()不會起效
            request.getSession().setAttribute("username",name);

            String URL = response.encodeURL("/cart/ProductList"); 
            request.setAttribute("URL",URL);

            request.getRequestDispatcher(("/welcome.jsp")).forward(request,response);
        }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

welcome.jsp

<!--其他省略-->
<body>
WELCOME ${username}
<br/>
<a href="${URL}">product list</a>
<P>${URL}</P>
</body>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM