cookie和session基礎知識學習(一)

筆者對於cookie和session也是初學,寫這篇文章的主要目的是方便自己去理解cookie和session的相關內容,所以有些描述並不是那麼專業和全面,請多多包涵。

一、會話技術

一次會話過程指的是會從打開瀏覽器到關閉瀏覽器的過程,在此過程中包含多次請求響應,會話指的就是這些請求和響應。
由於HTTP是無狀態的協議,每一次的請求和響應都是相互獨立的。而在實際的操作中,完成一些比較複雜的功能時需要在多次不同的請求和響應之間交互。所以爲了使不同請求和響應之間能夠交互,便產生了會話技術
會話技術主要有兩類:

  • cookie
    cookie是客戶端技術,程序把每個用戶的數據以cookie的形式保存到各自客戶端瀏覽器中。當用戶使用瀏覽器再次訪問服務器中的web資源的時候,就可以從自己保存的cookie裏面獲取一些有用信息。

  • session
    session是服務器端技術,服務器在運行時可以爲每一個用戶的瀏覽器創建一個獨享的session對象。由於session爲用戶瀏覽器獨享,所有用戶在訪問服務器的時候,可以把各自的數據放在各自的session中,當用戶再次訪問服務器中的web資源的時候,其他web資源再從用戶各自的session中取出數據爲用戶服務。

二、cookie的簡單使用

cookie是客戶端會話技術,將數據保存到客戶端。
cookie就是一串字符串,格式就是鍵值對,用分號隔開。使用cookie時,調用Java自帶的相應的API即可。
使用cookie的步驟如下:

  • 創建cookie對象,綁定數據
  • 發送cookie對象
  • 獲取cookie對象,得到數據

下面是一個簡單實例的完整代碼,CookieTest1創建併發送cookie,CookieTest2獲取cookie。

  • CookieTest1
package com.study.cookieandsessionstudy;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "CookieTest1", value = "/CookieTest1")
public class CookieTest1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //創建cookie 注意這裏穿的value字符不要加空格,addCookie時是不能使用空格的
        Cookie cookie = new Cookie("msg", "hello-world");

        //發送cookie
        response.addCookie(cookie);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);

    }
}
  • CookieTest2
package com.study.cookieandsessionstudy;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "CookieTest2", value = "/CookieTest2")
public class CookieTest2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //獲取cookie
        Cookie[] cookies = request.getCookies();

        String name;
        String value;

        if (cookies != null) {
            for (Cookie cookie : cookies) {
                name = cookie.getName();
                value = cookie.getValue();
                System.out.println("name:" + name);
                System.out.println("value:" + value);
            }

        }

    }

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

        this.doPost(request, response);

    }
}

三、使用cookie的原理

cookie保存下來之後是要通過HTTP協議進行傳輸的,若對HTTP瞭解的話便會知道請求和響應有對應的頭,而cookie對應的頭爲Set-CookieCookie

  • Set-Cookie由服務器發送,它包含在響應請求的頭部中。它用於在客戶端創建一個Cookie。
    Set-Cookie的格式:
Set-Cookie: <name>=<value>[; <name>=<value>]...
                    [; expires=<date>][; domain=<domain_name>]
                    [; path=<some_path>][; secure][; httponly]
                    
  • Cookie頭由客戶端發送,包含在HTTP請求的頭部中。注意,只有cookie的domain和path與請求的URL匹配纔會發送這個cookie。

在這裏插入圖片描述

2019.12.22

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