會話技術
-
概念會話是一次會話中包含多次請求和響應。
一次會話:瀏覽器第一次給服務器資源發(fā)送請求,會話建立,直到有一方斷開為止
功能:在一次會話的范圍內(nèi)的多次請求間,共享數(shù)據(jù)
-
方式:
- 客戶端會話技術:Cookie
- 服務器端會話技術:Session
使用步驟:
-
創(chuàng)建Cookie對象, 綁定數(shù)據(jù)
new Cookie(string name, string value) -
發(fā)送Cookie對象
response . addCookie(Cookie cookie) -
獲取Cookie, 拿到數(shù)據(jù)
Cookie[] request . getcookies()
實現(xiàn)原理:基于響應頭set-cooki e和請求頭cookie實現(xiàn)
cookie的細節(jié)
1. 一次可不可以發(fā)送多個cookie?
- 可以創(chuàng)建多個cookie對象,使用response調(diào)用多次addcookie方法發(fā)送cookie即可。
2. cookie在瀏覽器中保存多長時間?
- 默認情況下,當瀏覽器關閉后,Cookie數(shù)據(jù)被銷毀
- 持久化存儲:
- setMaxAge(int seconds)
- 正數(shù):將Cookie數(shù)據(jù)寫到硬盤的文件中。持久化存儲。cookie存活時間。
- 負數(shù):默認值
- 零:刪除cookie信息
- setMaxAge(int seconds)
3. cooki e能不能存中文?
- 在tomcat 8之前cooki e中不能直接存儲中文數(shù)據(jù)。
- 需要將中文數(shù)據(jù)轉(zhuǎn)碼--- 一般采用URL編碼(%E3)
- 在tomcat 8之后,cookie支持中文數(shù)據(jù)。
4.cookie共享問題?
- 假設在一個tomcat服務器中,部署了多個web項目,那么在這些web項目中cookie能不能共享?
- 默認情況下cookie不能共享
- setpath(string path):設置cooki e的獲取范圍。默認情況下,設置當前的虛擬目錄
- 如果要共享,則可以將path設置為"/”
- 不同的tomcat服務器間cookie共享問題?
- setDomain(String path):如果設置一級域名相同,那么多個服務器之間cookie可以
- setDomain(". baidu. com"),那么tieba. baidu. com和news . baidu. com中cookie可以共享
Cookie的特點和作用
- 特點:
- cookie存儲數(shù)據(jù)在客戶端瀏覽器
- 瀏覽器對于單個cookie的大小有限(4kb)以及對同一個域下的總cookie數(shù)量也有限制(20個)
- 作用:
- cookie一般用于存出少量敏感的數(shù)據(jù)
- 在不登陸的情況下,完成服務器對客戶端的身份識別
Session
概念:服務器端會話技術,在一次會話的多次請求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務器端的對象中,HttpSession
使用
-
獲取HttpSession對象:
HttpSession session = request.getSession(); -
使用HttpSession對象 :
Object getAttribute(String name ) void setAttribute(String name, Object value) void removeAttribute(string name) -
原理
- Session的實現(xiàn)是依賴于cookie的。
-
細節(jié):
4.1 當客戶端關閉后,服務器不關團,兩次獲取session是否為同一個?
* 默認情況下。不是。
* 如果需要相同,則可以創(chuàng)建Cookie,鍵為JSESSIONID,設置最大存活時間,讓cookie持久化保存。Cookie c = new Cookie("JSESSIONID" , session. getId()); c. setMaxAge(60*60); response , addcookie(c)
客戶端不關閉,服務器關閉后,兩次獲取的session是同一 個嗎?
不是同一個,但是要確保數(shù)據(jù)不丟失。tomcat自動完成以下工作:
- session的鈍化 :在服務器正常關閉之前,將session對象系列化到硬盤上
- session的活化 :在服務器啟動后,將session文件轉(zhuǎn)化為內(nèi)存中的session對象即可。
session什么時候被銷毀 ?
- 服務器關閉
- session對象調(diào)用invalidate()
- session默認失效時間30分鐘
選擇性配置修改
<session-config>
<session-timeout >30</session-timeout>
</session-config>
Session特點
- session用于存儲一次會話的多次請求的數(shù)據(jù),存在服務器端
- session可以存儲任意大小的數(shù)據(jù)
session與cookie的區(qū)別
- session存儲數(shù)據(jù)在服務器端,cookie在客戶端
- session沒有數(shù)據(jù)大小限制,cookie有
- session數(shù)據(jù)安全,cookie相對于不安全