會話技術: cookie 及 session 域對象總結

會話技術: cookie 及 session 域對象總結

會話技術

概述

會話

當打開一個瀏覽器的時候,意味着會話開始了
在開始和結束間,瀏覽器和服務器可以進行N次的交互
當關閉了該瀏覽器的時候,意味着會話結束了

作用

用來存儲瀏覽器和服務器交互產生的N多數據(cookie或者session)

會話技術的分類:cookie和session

cookie(瀏覽器端的會話技術):瀏覽器和服務器交互的數據可以存儲在cookie,整個cookie在瀏覽器端

session(服務器端的會話技術):瀏覽器和服務器交互的數據可以存儲在session,整個session在服務器端

什麼情況下我們會選擇使用cookie或session去存儲瀏覽器和服務器交互中產生的數據?

當用戶的私有數據需要在多個Servlet之間傳遞的時候,可以使用會話技術解決(cookie&session)

客戶端的會話技術:cookie

概述

cookie: 小紙條

作用:存儲並且傳遞數據 (瀏覽器和服務器交互的數據)

特點

1 數據都在瀏覽器方
2 cookie是由服務器創建交給瀏覽器保存

cookie的使用

服務器如何創建cookie

Cookie cookie=new Cookie(String,String); 

服務器如果把cookie傳遞給客戶端

response.addCookie(cookie);

注意:服務器可以給瀏覽器傳遞多個cookie,瀏覽器都會保存 但存在key值覆蓋

服務器端如何獲取到瀏覽器傳遞的cookie信息

Cookie[] request.getCookies(); //自動從請求頭中 獲取cookie信息 並且切割並封裝成多個cookie對象

cookie的常用API

getName();   返回值String,返回的是cookie的key
getValue();  返回值String,返回的是cookie的value

cookie的整個使用過程

服務器創建cookie存儲數據--->把整個cookie傳遞給瀏覽器---->瀏覽器端自動保存cookie
瀏覽器會自動將保存的cookie傳遞服務器--->服務器獲取傳遞的cookie數據--->使用數據

cookie的細節

會話級別的cookie(默認方式)和持久化級別的cookie

會話級別的cookie:瀏覽器關閉當前會話默認會把保存的cookie全部銷燬(默認)
持久化級別的cookie:可以讓瀏覽器在一定時間不論開關都會保留cookie
		方法:setMaxAge(秒)
	  			 >0: 有效時間
	   			 =0:過期(清除)
		特點:設置的時間如果到期了,瀏覽器會自動把過期的cookie銷燬

cookie的路徑:通過設置cookie的路徑 設置該cookie在哪些資源下有效

方法api:setPath(“路徑”)
 /day10/cs5   只在訪問/day10/cs5資源才帶
 /day10      訪問整個day10項目下的資源都帶(企業)
 /	         訪問整個服務器上的項目資源都帶	
 默認	       當前servlet訪問路徑的上一級
 				訪問到當前servlet的上一級路徑才帶
				例如:Servlet: /demo/sd1==訪問/demo下的資源才攜帶	

cookie的注意點:

cookie中不能出現特殊符號 例如:空格 分號 逗號  
cookie存入的數據有大小限制 4kb 

案例:案例–記錄用戶最新訪問時間 且輸出用戶的上次訪問時間

服務器端的會話技術:session

概述

session是保存在服務器端的會話技術

作用:也是爲了保存會話中產生的數據

特點

1 保存在session中的數據在服務器端
2 session其實就是一個域對象  xxxAttribute()存儲數據的方法

session的使用

session獲取:request.getSession()

作用範圍:

數據在一次會話中共享
因爲在一次會話中,訪問多少個servlet,獲取到的session都是同一個
但是如果不在一次會話中,多個servlet中產生的不再是同一個session對象

session的剖析

爲什麼在一次會話中,使用的都是同一個session對象

Cookie:JSESSIONID=C573A3AF2DDF0491AE6FB31608525641
因爲jsessionid相同,根據jsessionid獲取的session是同一個

爲什麼瀏覽器關閉以後(不在一個會話了),使用的就不是同一個對象了

瀏覽器一關閉   Cookie銷燬了 cookie中的JSESSIONID也就沒有

session的執行流程

當執行到調用getSession方法時,首先判斷cookie中是否有jsessionid。
如果不存在jsessionid:那麼直接創建一個新的session對象返回給你,並且向響應頭中寫一個新的jsessionid存放cookie給瀏覽器保存
如果存在jsessionid:從服務器內存中去獲取對應的session對象繼續使用
(瀏覽器關閉)
再次判斷cookie中是否有jsessionid,如果沒有,那麼直接創建一個新的session對象返回給你,並且向響應頭中寫一個新的jsessionid存放cookie給瀏覽器

session和cookie的區別?(面試題)

session:服務器端的會話技術 數據都在服務器
cookie:客戶端的會話技術 數據都在瀏覽器
session:存儲的內容沒有大小限制
cookie:只能存儲4kb的內容
session:存儲的數據安全
cookie:存儲的數據不安全

域對象的總結

哪些技術可以在多個servlet/jsp之間進行數據傳遞:servletContext request cookie session

域對象:servletContext request session 都在服務器端 都有xxxAttribute方法

Request

創建:請求一次 創建一個request對象
銷燬:響應回去,就銷燬
數據作用範圍:一次請求,多次跳轉中,使用的是同一個request對象

ServletContext

創建:服務器啓動,就創建且只創建一個ServletContext對象
銷燬:服務器關閉銷燬
數據作用範圍:整個項目所有人共用

Session

創建:java認爲在會話的第一次訪問到request.getSession方法創建session對象
銷燬
	 1 被動銷燬:30分鐘不使用自動從內存中移出 
	 2 主動銷燬:session.invalidate()
	 3 服務器非正常關閉
	
數據作用範圍:一次會話中 因爲一次會話中使用的是同一個session對象

只要多個servlet/jsp之間做數據傳遞和共享了,都要想到以上域對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章