1、什么是會話:
-
會話對應的英語單詞:session
-
用戶打開瀏覽器,進行一系列操作,然后最終將瀏覽器關閉,這個整個過程叫做:一次會話。會話在服務器端也有一個對應的java對象,這個java對象叫做:session。
-
什么是一次請求:用戶在瀏覽器上點擊了一下,然后到頁面停下來,可以粗略認為是一次請求。請求對應的服務器端的java對象是:request。
-
一個會話當中包含多次請求。(一次會話對應N次請求。)
2、在java的servlet規范當中,session對應的類名:HttpSession(jarkata.servlet.http.HttpSession)(tomcat10版本)
3、session機制屬于B/S結構的一部分。如果使用php語言開發WEB項目,同樣也是有session這種機制的。session機制實際上是一個規范。然后不同的語言對這種會話機制都有實現。
4、session對象最主要的作用是:保存會話狀態。(用戶登錄成功了,這是一種登錄成功的狀態,你怎么把登錄成功的狀態一直保存下來呢?使用session對象可以保留會話狀態。)
5、為什么需要session對象來保存會話狀態呢?
-
因為HTTP協議是一種無狀態協議。
-
什么是無狀態:請求的時候,B和S是連接的,但是請求結束之后,連接就斷了。為什么要這么做?HTTP協議為什么要設計成這樣?因為這樣的無狀態協議,可以降低服務器的壓力。請求的瞬間是連接的,請求結束之后,連接斷開,這樣服務器壓力小。
6、session對象的實現
//設置session
HttpSession session = request.getSession();
//給session設置為鍵值對,例如
session.setAttribute("username",username);
//獲取
Object username = session.getAttribute(username);
7、session的實現原理:
-
JSESSIONID=xxxxxx 這個是以Cookie的形式保存在瀏覽器的內存中的。瀏覽器只要關閉。這個cookie就沒有了。
-
session列表是一個Map,map的key是sessionid,map的value是session對象。
-
用戶第一次請求,服務器生成session對象,同時生成id,將id發送給瀏覽器。
-
用戶第二次請求,自動將瀏覽器內存中的id發送給服務器,服務器根據id查找session對象。
-
關閉瀏覽器,內存消失,cookie消失,sessionid消失,會話等同于結束。
8、銷毀session對象:
session.invalidate();