response、session、cookie

response

response :響應對象
提供的方法:
void addCookie( Cookie cookie ); 服務端向客戶端增加cookie對象
void sendRedirect(String location ) throws IOException; :頁面跳轉的一種方式(重定向)
void setContetType(String type):設置服務端響應的編碼(設置服務端的contentType類型)

示例:登陸
login.jsp -> check.jsp ->success.jsp

. 請求轉發 重定向
地址欄是否改變 不變(check.jsp) 改變(success.jsp)
是否保留第一次請求時的數據 保留 不保留
請求的次數 1 2
跳轉發生的位置 服務端 客戶端發出的第二次跳轉
轉發、重定向:

轉發:  
	張三(客戶端)     ->    【 服務窗口 A (服務端 )    ->  服務窗口B  】


重定向:
	張三(客戶端) 	  -> 	服務窗口 A (服務端 ) ->去找B

	張三(客戶端)    -> 	服務窗口 B (服務端 ) ->結束

在這裏插入圖片描述

session(服務端)

Cookie(客戶端,不是內置對象):Cookie是由 服務端生成的 ,再發送給客戶端保存。
相當於 本地緩存的作用: 客戶端(hello.mp4,zs/abc)->服務端(hello.mp4;zs/abc)
作用:提高訪問服務端的效率,但是安全性較差。

Cookie:	name=value   
javax.servlet.http.Cookie
public Cookie(String name,String value)
String getName():獲取name
String getValue():獲取value
void setMaxAge(int expiry);最大有效期 (秒)

服務端準備Cookie:
response.addCookie(Cookie cookie)
頁面跳轉(轉發,重定向)
客戶端獲取cookie: request.getCookies();

a.服務端增加cookie :response對象;客戶端獲取對象:request對象
b.不能直接獲取某一個單獨對象,只能一次性將 全部的cookie拿到

通過F12可以發現 除了自己設置的Cookie對象外,還有一個name爲 JSESSIONID的cookie

建議 cookie只保存 英文數字,否則需要進行編碼、解碼

session (會話)

a.瀏覽網站:開始-關閉
b.購物: 瀏覽、付款、退出
c.電子郵件:瀏覽、寫郵件、退出
開始-結束

session機制:

客戶端第一次請求服務端時,(jsessionid-sessionid)服務端會產生一個session對象(用於保存該客戶的信息);
並且每個session對象 都會有一個唯一的 sessionId( 用於區分其他session);
服務端由會 產生一個cookie,並且 該cookie的name=JSESSIONID ,value=服務端sessionId的值;
然後 服務端會在 響應客戶端的同時 將該cookie發送給客戶端,至此 客戶端就有了 一個cookie(JSESSIONID);
因此,客戶端的cookie就可以和服務端的session一一對應(JSESSIONID - sessionID)

客戶端第二/n次請求服務端時:服務端會先用客戶端cookie種的JSESSIONID 去服務端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),說明此用戶 不是第一次訪問,無需登錄;

例子:
客戶端: 顧客(客戶端)
服務端: 存包處 - 商場(服務端)

顧客第一次存包:商場 判斷此人是 之前已經存過包(通過你手裏是否有鑰匙)。
如果是新顧客(沒鑰匙) ,分配一個鑰匙 給該顧客; 鑰匙 會和 櫃子 一一對應;

第二/n次 存包:商場 判斷此人是 之前已經存過包(通過你手裏是否有鑰匙)
如果是老顧客(有鑰匙),則不需要分配;該顧客手裏的鑰匙 會 和櫃子 自動一一對應。

cookie和session的區別:

/ session cookie
保存的位置 服務端 客戶端
安全性 較安全 較不安全
保存的內容 Object String
四種範圍對象(小->大)
pageContext  JSP頁面容器   (page對象); 當前頁面有效
request   請求對象		 	同一次請求有效
session   會話對象			同一次會話有效
appliation 全局對象			全局有效(整個項目有效)

👇
a.
pageContext 當前頁面有效 (頁面跳轉後無效)

b.
request   同一次請求有效;其他請求無效 (請求轉發後有效;重定向後無效)

c.
session  同一次會話有效  (無論怎麼跳轉,都有效;關閉/切換瀏覽器後無效 ; 從 登陸->退出 之間 全部有效)

d.
application
	全局變量;整個項目運行期間 都有效 (切換瀏覽器 仍然有效);關閉服務、其他項目 無效

在這裏插入圖片描述

注意:
1.以上的4個範圍對象,通過 setAttribute()賦值,通過getAttribute()取值;
2.以上範圍對象,儘量使用最小的範圍。因爲 對象的範圍越大,造成的性能損耗越大。

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