App下載

Cookie是什么?在Java中如何使用Cookie?

猿友 2021-08-02 14:42:33 瀏覽數 (2274)
反饋

什么是Cookie

在現實生活中,當顧客第一次在超市購物,通常服務員會詢問是否辦理一張會員卡來積分以便日后折扣等福利活動。會員卡會記錄顧客的姓名、積分、消費記錄等信息,如果顧客要參與超市的福利活動等都需要提供會員卡,服務員在后臺刷卡查詢即可知道是哪個用戶在使用會員卡。

現在將現實生活中的案例中的角色互換一下。

當用戶沒有在Web服務器登記過用戶信息,而使用網站提供的需登錄的服務時,服務器會告知瀏覽器跳轉到登陸頁面進行用戶信息的登記操作,登錄完成之后,瀏覽器向服務器發(fā)起一次登陸請求,服務器將用戶的信息存儲到Cookie中,并響應給瀏覽器新的Cookie,瀏覽器得到Cookie之后將它存儲到緩存區(qū)。

當用戶在Web服務器登記過用戶信息,而使用網站提供的需登錄的服務時,服務器會通過請求中攜帶的Cookie判斷此次請求時哪個用戶,并以這個Cookie的信息去查詢數據庫等操作,完成用戶需要的服務。

Cookie的必要

HTTP是無狀態(tài)協(xié)議,意味著服務器不會在兩個請求之間保留任何數據(狀態(tài))。由于Web服務器要面對很多用戶的并發(fā)訪問,為了提高Web服務器對并發(fā)訪問的處理能力,在設計HTTP協(xié)議時規(guī)定Web服務器發(fā)送HTTP應答報文和文檔時,不保存發(fā)出請求的Web瀏覽器進程的任何狀態(tài)信息,從而減輕服務器端的負載,同時無狀態(tài)也減小了HTTP請求的開銷。

但是在必要的場景,如登陸、購物等都需要保存用戶的狀態(tài)(信息),就不得不用到Cookie。

Cookie如何工作

第一次訪問服務器,沒有Cookie,向服務器登記新的Cookie。

第二次及以后訪問服務器,有Cookie,無需登記新的Cookie。

模擬用戶登錄

需求分析:

當用戶訪問homepage.jsp時,判斷請求中是否攜帶username的Cookie,如果不存在就通知瀏覽器跳轉到登錄頁面進行用戶信息的登記。當用戶再次訪問homepae.jsp時,不會被攔截,可以讓用戶訪問個人主頁頁面。

編寫代碼:

個人主頁的Servlet

@WebServlet(name = "homepageServlet", urlPatterns = "/homepage")
public class HomePageServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            if (!cookie.getName().equals("username")) {
                // 如果用戶是第一次訪問個人主頁,就通知瀏覽器跳轉到登陸頁面進行登錄
                resp.sendRedirect(req.getContextPath() + "/login.jsp");
            }
        }
    }

}

用戶登錄的Servlet

@WebServlet(name = "loginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 獲取http請求參數username
        String username = request.getParameter("username");
        // 設置響應內容的類型
        response.setContentType("text/html;charset=utf-8");
        // 獲取Cookie值
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if (!cookie.getName().equals("username")) { // 用戶第一次訪問
                Cookie userCookie = new Cookie("username", username);
                userCookie.setMaxAge(300);
                response.addCookie(userCookie);
            }
            response.sendRedirect(request.getContextPath() + "/homepage.jsp");
        }
    }

}

打開瀏覽器,實驗一下:

在第一次訪問homepage頁面時,看到瀏覽器緩存區(qū)并沒有名為username的Cookie,只有當登錄之后,瀏覽器緩存區(qū)才有了這個Cookie。

以上就是 Cookie 一些相關的基本介紹,以及在 Java 編程中是如何使用 Cookie的全部內容,想要了解更多 Cookie 的相關知識以及 JavaWeb 前端的資料請關注W3Cschool其它相關文章!也希望大家能夠多多支持我們!

0 人點贊