會(huì)話技術(shù)
一次會(huì)話中包含多次請(qǐng)求和響應(yīng)
一次會(huì)話:瀏覽器第一次給服務(wù)器發(fā)送請(qǐng)求,會(huì)話建立,直到有一方斷開(kāi)連接。
功能:一次會(huì)話范圍內(nèi)的多次請(qǐng)求間實(shí)現(xiàn)資源共享
方式:
- 客戶端會(huì)話技術(shù)(cookie)
- 服務(wù)器會(huì)話技術(shù)(session)
cookie
- 概念: 客戶端會(huì)話技術(shù),將數(shù)據(jù)保存到客戶端
快速入門
使用步驟
1、創(chuàng)建cookie對(duì)象,綁定數(shù)據(jù)
Cookie cookie=new Cookie(String name,String value)
2、發(fā)送cookie對(duì)象
response.addCookie(Cookie cookie)
3、獲取Cookie,拿到數(shù)據(jù)
Cookie[] cookies=request.getCookies()
cookie實(shí)現(xiàn)原理
image.png
cookie的細(xì)節(jié)
1、一次可不可以發(fā)送多個(gè)cookie
- 可以
- 創(chuàng)建多個(gè)cookie對(duì)象,使用response調(diào)用多次addCookie()方法發(fā)送cookie即可。
2、cookie在瀏覽器保存時(shí)間
- 默認(rèn)情況下,瀏覽器關(guān)閉,cookie數(shù)據(jù)被銷毀
- 非默認(rèn)情況下,可以持久化存儲(chǔ)
setMaxAge(int seconds)
對(duì)于seconds來(lái)說(shuō),有正數(shù),負(fù)數(shù),零三種情況
* 正數(shù):將cookie數(shù)據(jù)寫道硬盤文件中,持久化存儲(chǔ),cookie存活時(shí)間
* 負(fù)數(shù):默認(rèn)值,存在于瀏覽器內(nèi)存,瀏覽器關(guān)掉,cookie就消失
* 零:代表刪除該cookie
3、cookie能不能存中文
- tomcat8之前不能直接存儲(chǔ)中文數(shù)據(jù),8以后可以直接存儲(chǔ)中文數(shù)據(jù)
4、cookie獲取范圍多大
- 假設(shè)在一個(gè)服務(wù)器中部署了多個(gè)web項(xiàng)目,在這些web項(xiàng)目中,cookie能不能共享
- 默認(rèn)情況下不能共享
- setPath(String path) 設(shè)置cookie的獲取范圍。默認(rèn)情況下,設(shè)置為當(dāng)前目錄
cookie.setPath("/") 這樣設(shè)置可以保證cookie得到共享 - 不同的tomcat服務(wù)器間cookie共享問(wèn)題
如果設(shè)置一級(jí)域名相同,那么多個(gè)服務(wù)器之間cookie可以共享
setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
5、cookie特點(diǎn) - cookie存儲(chǔ)數(shù)據(jù)在客戶端
- 瀏覽器對(duì)于單個(gè)cookie大小有限制,以及對(duì)同一個(gè)域名下的總cookie數(shù)量也有限制(20個(gè))
- cookie一般用域存儲(chǔ)少量的不太敏感的數(shù)據(jù)
- 在不登陸的情況下,完成服務(wù)器對(duì)客戶端身份識(shí)別
session
- 服務(wù)器端會(huì)話技術(shù),在一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中
快速入門
HttpSession對(duì)象
獲取Session對(duì)象
- HttpSession session=request.getSession();
使用Session對(duì)象
- Object getAttribute(String name)
- void setAttribute(String name,Object value)
- void removeAttribute(String name)
session原理
服務(wù)器是如何確保在一次會(huì)話范圍內(nèi),多次獲取的session對(duì)象是同一個(gè)
- session是依賴于cookie的
session細(xì)節(jié)
- 當(dāng)客戶端關(guān)閉后,服務(wù)器不關(guān)閉,兩次獲取session是否為同一個(gè)?
- 默認(rèn)情況下,不是
- 如果需要相同,則可以創(chuàng)建cookie,鍵為JSESSIONID,設(shè)置最大存活時(shí)間,讓cookie持久化保存
Cookie c=new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.add(c);
- 客戶端不關(guān)閉,服務(wù)器關(guān)閉后,兩次獲取的sessionID是同一個(gè)嗎
不是