筆者對於cookie和session也是初學,寫這篇文章的主要目的是方便自己去理解cookie和session的相關內容,所以有些描述並不是那麼專業和全面,請多多包涵。
在上篇文章cookie和session基礎知識學習(一)裏面介紹了有關會話技術的概念,以及cookie的一些基礎知識。這篇文章主要講的是關於session的一些基礎知識。
一、session的簡單使用
session是服務器端技術,服務器在運行時可以爲每一個用戶的瀏覽器創建一個獨享的session對象。
session的使用步驟:
- 獲取session對象
- 使用session存儲數據
- 使用session獲取數據
注意session與cookie在使用時的差異,cookie是Cookie對象,而session是HttpSession對象;cookie對象由自己創建,而session對象是獲取對象(request.getSession()),而不用自己創建HttpSession對象。
下面是一個簡單的session案例,SessionTest1存儲數據,SessionTest2獲取數據。
SessionTest1:
package com.study.cookieandsessionstudy;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "SessionTest1", value = "/SessionTest1")
public class SessionTest1 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取session
HttpSession httpSession = request.getSession();
//存儲數據
httpSession.setAttribute("msg", "hello-world");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
SessionTest2:
package com.study.cookieandsessionstudy;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "SessionTest2", value = "/SessionTest2")
public class SessionTest2 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取session
HttpSession httpSession = request.getSession();
//獲取數據
Object object = httpSession.getAttribute("msg");
System.out.println(object);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
二、session的使用原理
session不同於cookie,當用戶第一次訪問服務器時,服務器爲用戶創建專享的session對象,然後會把session對象的id以cookie形式返回給客戶端。針對這種情況cookie有專門的屬性JSESSIONID來存儲session的id。
這樣,當用戶保持當前瀏覽器的情況下再去訪問服務器時,根據傳過來的cookie所帶的JSESSIONID的值便可以找到其專屬session,然後便可完成相應的會話。
由此,session的實現依賴於cookie。
2019.12.22