會(huì)話(huà)技術(shù)
-
概念會(huì)話(huà)是一次會(huì)話(huà)中包含多次請(qǐng)求和響應(yīng)。
一次會(huì)話(huà):瀏覽器第一次給服務(wù)器資源發(fā)送請(qǐng)求,會(huì)話(huà)建立,直到有一方斷開(kāi)為止
功能:在一次會(huì)話(huà)的范圍內(nèi)的多次請(qǐng)求間,共享數(shù)據(jù)
-
方式:
- 客戶(hù)端會(huì)話(huà)技術(shù):Cookie
- 服務(wù)器端會(huì)話(huà)技術(shù):Session
使用步驟:
-
創(chuàng)建Cookie對(duì)象望门, 綁定數(shù)據(jù)
new Cookie(string name, string value)
-
發(fā)送Cookie對(duì)象
response . addCookie(Cookie cookie)
-
獲取Cookie, 拿到數(shù)據(jù)
Cookie[] request . getcookies()
實(shí)現(xiàn)原理:基于響應(yīng)頭set-cooki e和請(qǐng)求頭cookie實(shí)現(xiàn)
cookie的細(xì)節(jié)
1. 一次可不可以發(fā)送多個(gè)cookie?
- 可以創(chuàng)建多個(gè)cookie對(duì)象,使用response調(diào)用多次addcookie方法發(fā)送cookie即可锰霜。
2. cookie在瀏覽器中保存多長(zhǎng)時(shí)間?
- 默認(rèn)情況下筹误,當(dāng)瀏覽器關(guān)閉后,Cookie數(shù)據(jù)被銷(xiāo)毀
- 持久化存儲(chǔ):
- setMaxAge(int seconds)
- 正數(shù):將Cookie數(shù)據(jù)寫(xiě)到硬盤(pán)的文件中癣缅。持久化存儲(chǔ)厨剪。cookie存活時(shí)間。
- 負(fù)數(shù):默認(rèn)值
- 零:刪除cookie信息
- setMaxAge(int seconds)
3. cooki e能不能存中文?
- 在tomcat 8之前cooki e中不能直接存儲(chǔ)中文數(shù)據(jù)所灸。
- 需要將中文數(shù)據(jù)轉(zhuǎn)碼--- 一般采用URL編碼(%E3)
- 在tomcat 8之后丽惶,cookie支持中文數(shù)據(jù)。
4.cookie共享問(wèn)題?
- 假設(shè)在一個(gè)tomcat服務(wù)器中爬立,部署了多個(gè)web項(xiàng)目钾唬,那么在這些web項(xiàng)目中cookie能不能共享?
- 默認(rèn)情況下cookie不能共享
- setpath(string path):設(shè)置cooki e的獲取范圍。默認(rèn)情況下侠驯,設(shè)置當(dāng)前的虛擬目錄
- 如果要共享抡秆,則可以將path設(shè)置為"/”
- 不同的tomcat服務(wù)器間cookie共享問(wèn)題?
- setDomain(String path):如果設(shè)置一級(jí)域名相同,那么多個(gè)服務(wù)器之間cookie可以
- setDomain(". baidu. com"),那么tieba. baidu. com和news . baidu. com中cookie可以共享
Cookie的特點(diǎn)和作用
- 特點(diǎn):
- cookie存儲(chǔ)數(shù)據(jù)在客戶(hù)端瀏覽器
- 瀏覽器對(duì)于單個(gè)cookie的大小有限(4kb)以及對(duì)同一個(gè)域下的總cookie數(shù)量也有限制(20個(gè))
- 作用:
- cookie一般用于存出少量敏感的數(shù)據(jù)
- 在不登陸的情況下吟策,完成服務(wù)器對(duì)客戶(hù)端的身份識(shí)別
Session
概念:服務(wù)器端會(huì)話(huà)技術(shù)儒士,在一次會(huì)話(huà)的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中檩坚,HttpSession
使用
-
獲取HttpSession對(duì)象:
HttpSession session = request.getSession();
-
使用HttpSession對(duì)象 :
Object getAttribute(String name ) void setAttribute(String name, Object value) void removeAttribute(string name)
-
原理
- Session的實(shí)現(xiàn)是依賴(lài)于cookie的着撩。
-
細(xì)節(jié):
4.1 當(dāng)客戶(hù)端關(guān)閉后,服務(wù)器不關(guān)團(tuán)匾委,兩次獲取session是否為同一個(gè)?
* 默認(rèn)情況下拖叙。不是。
* 如果需要相同赂乐,則可以創(chuàng)建Cookie,鍵為JSESSIONID,設(shè)置最大存活時(shí)間薯鳍,讓cookie持久化保存。Cookie c = new Cookie("JSESSIONID" , session. getId()); c. setMaxAge(60*60); response , addcookie(c)
客戶(hù)端不關(guān)閉挨措,服務(wù)器關(guān)閉后挖滤,兩次獲取的session是同一 個(gè)嗎?
不是同一個(gè)崩溪,但是要確保數(shù)據(jù)不丟失。tomcat自動(dòng)完成以下工作:
- session的鈍化 :在服務(wù)器正常關(guān)閉之前斩松,將session對(duì)象系列化到硬盤(pán)上
- session的活化 :在服務(wù)器啟動(dòng)后伶唯,將session文件轉(zhuǎn)化為內(nèi)存中的session對(duì)象即可。
session什么時(shí)候被銷(xiāo)毀 ?
- 服務(wù)器關(guān)閉
- session對(duì)象調(diào)用invalidate()
- session默認(rèn)失效時(shí)間30分鐘
選擇性配置修改
<session-config>
<session-timeout >30</session-timeout>
</session-config>
Session特點(diǎn)
- session用于存儲(chǔ)一次會(huì)話(huà)的多次請(qǐng)求的數(shù)據(jù)惧盹,存在服務(wù)器端
- session可以存儲(chǔ)任意大小的數(shù)據(jù)
session與cookie的區(qū)別
- session存儲(chǔ)數(shù)據(jù)在服務(wù)器端抵怎,cookie在客戶(hù)端
- session沒(méi)有數(shù)據(jù)大小限制,cookie有
- session數(shù)據(jù)安全岭参,cookie相對(duì)于不安全