建設(shè)一個(gè)網(wǎng)站流程圖寧波seo關(guān)鍵詞如何優(yōu)化
文章目錄
- 會(huì)話跟蹤技術(shù)的概述
- Cookie
- 概念
- Cookie工作流程
- Cookie基本使用
- 發(fā)送Cookie
- 獲取Cookie
- Cookie原理分析
- Cookie的使用細(xì)節(jié)
- Cookie的存活時(shí)間
- Cookie存儲(chǔ)中文
- Session
- Session的基本使用
- 概念
- 工作流程
- Session的基本使用
- Session的原理分析
- Session的使用細(xì)節(jié)
- Session的鈍化與活化
- Session銷毀
- Cookie和Session的區(qū)別和應(yīng)用場(chǎng)景
會(huì)話跟蹤技術(shù)的概述
會(huì)話:用戶打開瀏覽器,訪問web服務(wù)器的資源,會(huì)話建立,直到有一方斷開連接,會(huì)話結(jié)束。在一次會(huì)話中可以包含多次請(qǐng)求和響應(yīng)。
- 從瀏覽器發(fā)出請(qǐng)求到服務(wù)端響應(yīng)數(shù)據(jù)給前端之后,一次會(huì)話(在瀏覽器和服務(wù)器之間)就被建立了
- 會(huì)話被建立后,如果瀏覽器或服務(wù)端都沒有被關(guān)閉,則會(huì)話就會(huì)持續(xù)建立著
- 瀏覽器和服務(wù)器就可以繼續(xù)使用該會(huì)話進(jìn)行請(qǐng)求發(fā)送和響應(yīng),上述的整個(gè)過程就被稱之為會(huì)話
會(huì)話跟蹤:一種維護(hù)瀏覽器狀態(tài)的方法,服務(wù)器需要識(shí)別多次請(qǐng)求是否來自于同一瀏覽器,以便在同一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù)。 - 服務(wù)器會(huì)收到多個(gè)請(qǐng)求,這多個(gè)請(qǐng)求可能來自多個(gè)瀏覽器
- 服務(wù)器需要用來識(shí)別請(qǐng)求是否來自同一個(gè)瀏覽器
- 服務(wù)器用來識(shí)別瀏覽器的過程,這個(gè)過程就是會(huì)話跟蹤
- 服務(wù)器識(shí)別瀏覽器后就可以在同一個(gè)會(huì)話中多次請(qǐng)求之間來共享數(shù)據(jù)
客戶端會(huì)話跟蹤技術(shù):Cookie
服務(wù)端會(huì)話跟蹤技術(shù):Session
Cookie
概念
Cookie:客戶端會(huì)話技術(shù),將數(shù)據(jù)保存到客戶端,以后每次請(qǐng)求都攜帶Cookie數(shù)據(jù)進(jìn)行訪問。
Cookie工作流程
- 服務(wù)端提供了兩個(gè)Servlet,分別是ServletA和ServletB
- 瀏覽器發(fā)送HTTP請(qǐng)求1給服務(wù)端,服務(wù)端ServletA接收請(qǐng)求并進(jìn)行業(yè)務(wù)處理
- 服務(wù)端ServletA在處理的過程中可以創(chuàng)建一個(gè)Cookie對(duì)象并將name=zs的數(shù)據(jù)存入Cookie
- 服務(wù)端ServletA在響應(yīng)數(shù)據(jù)的時(shí)候,會(huì)把Cookie對(duì)象響應(yīng)給瀏覽器
- 瀏覽器接收到響應(yīng)數(shù)據(jù),會(huì)把Cookie對(duì)象中的數(shù)據(jù)存儲(chǔ)在瀏覽器內(nèi)存中,此時(shí)瀏覽器和服務(wù)端就建立了一次會(huì)話
- 在同一次會(huì)話中瀏覽器再次發(fā)送HTTP請(qǐng)求2給服務(wù)端ServletB,瀏覽器會(huì)攜帶Cookie對(duì)象中的所有數(shù)據(jù)
- ServletB接收到請(qǐng)求和數(shù)據(jù)后,就可以獲取到存儲(chǔ)在Cookie對(duì)象中的數(shù)據(jù),這樣同一個(gè)會(huì)話中的多次請(qǐng)求之間就實(shí)現(xiàn)了數(shù)據(jù)共享
Cookie基本使用
發(fā)送Cookie
創(chuàng)建Cookie對(duì)象,并設(shè)置數(shù)據(jù)
Cookie cookie = new Cookie("key","value");
發(fā)送Cookie到客戶端:使用response對(duì)象
response.addCookie(cookie);
獲取Cookie
獲取客戶端攜帶的所有Cookie,使用request對(duì)象
Cookie[] cookies = request.getCookies();
遍歷數(shù)組,獲取每一個(gè)Cookie對(duì)象:for
使用Cookie對(duì)象方法獲取數(shù)據(jù)
cookie.getName();
cookie.getValue();
Cookie原理分析
HTTP協(xié)議中的兩個(gè)請(qǐng)求頭信息:
- 響應(yīng)頭:set-cookie
- 請(qǐng)求頭: cookie
- AServlet給前端發(fā)送Cookie,BServlet從request中獲取Cookie的功能
- 對(duì)于AServlet響應(yīng)數(shù)據(jù)的時(shí)候,Tomcat服務(wù)器都是基于HTTP協(xié)議來響應(yīng)數(shù)據(jù)
- 當(dāng)Tomcat發(fā)現(xiàn)后端要返回的是一個(gè)Cookie對(duì)象之后,Tomcat就會(huì)在響應(yīng)頭中添加一行數(shù)Set-Cookie:username=zs
- 瀏覽器獲取到響應(yīng)結(jié)果后,從響應(yīng)頭中就可以獲取到Set-Cookie對(duì)應(yīng)值username=zs ,并將數(shù)據(jù)存儲(chǔ)在瀏覽器的內(nèi)存中
- 瀏覽器再次發(fā)送請(qǐng)求給BServlet的時(shí)候,瀏覽器會(huì)自動(dòng)在請(qǐng)求頭中添加Cookie: username=zs發(fā)送給服務(wù)端BServlet
- Request對(duì)象會(huì)把請(qǐng)求頭中cookie對(duì)應(yīng)的值封裝成一個(gè)個(gè)Cookie對(duì)象,最終形成一個(gè)數(shù)組
- BServlet通過Request對(duì)象獲取到Cookie[]后,就可以從中獲取自己需要的數(shù)據(jù)
Cookie的使用細(xì)節(jié)
Cookie的存活時(shí)間
默認(rèn)情況下,Cookie存儲(chǔ)在瀏覽器內(nèi)存中,當(dāng)瀏覽器關(guān)閉,內(nèi)存釋放,則Cookie被銷毀
- 設(shè)置Cookie存活時(shí)間
setMaxAge(int seconds)
參數(shù)值為:
1.正數(shù):將Cookie寫入瀏覽器所在電腦的硬盤,持久化存儲(chǔ)。到時(shí)間自動(dòng)刪除(單位:秒)
2.負(fù)數(shù):默認(rèn)值,Cookie在當(dāng)前瀏覽器內(nèi)存中,當(dāng)瀏覽器關(guān)閉,則Cookie被銷毀
3.零:刪除對(duì)應(yīng)Cookie
Cookie存儲(chǔ)中文
1.在AServlet中對(duì)中文進(jìn)行URL編碼,采用URLEncoder.encode(),將編碼后的值存入Cookie中
2.在BServlet中獲取Cookie中的值,獲取的值為URL編碼后的值
3.將獲取的值在進(jìn)行URL解碼,采用URLDecoder.decode(),就可以獲取到對(duì)應(yīng)的中文值
String value = "張三";
//對(duì)中文進(jìn)行URL編碼
value = URLEncoder.encode(value, "UTF-8");
System.out.println("存儲(chǔ)數(shù)據(jù):"+value);
//將編碼后的值存入Cookie中
Cookie cookie = new Cookie("username",value);
//設(shè)置存活時(shí)間 ,1周 7天
cookie.setMaxAge(60*60*24*7);
//獲取數(shù)據(jù)
String name = cookie.getName();
if("username".equals(name)){
String value = cookie.getValue();//獲取的是URL編碼后的值%E5%BC%A0%E4%B8%89
//URL解碼
value = URLDecoder.decode(value,"UTF-8");
System.out.println(name+":"+value);//value解碼后為 張三
break;
Session
Session的基本使用
概念
Session:服務(wù)端會(huì)話跟蹤技術(shù):將數(shù)據(jù)保存到服務(wù)端
- Session是存儲(chǔ)在服務(wù)端而Cookie是存儲(chǔ)在客戶端
- 存儲(chǔ)在客戶端的數(shù)據(jù)容易被竊取和截獲,存在很多不安全的因素
- 存儲(chǔ)在服務(wù)端的數(shù)據(jù)相比于客戶端來說就更安全
工作流程
- 在服務(wù)端的AServlet獲取一個(gè)Session對(duì)象,把數(shù)據(jù)存入其中
- 在服務(wù)端的BServlet獲取到相同的Session對(duì)象,從中取出數(shù)據(jù)
- 就可以實(shí)現(xiàn)一次會(huì)話中多次請(qǐng)求之間的數(shù)據(jù)共享了
Session的基本使用
獲取Session對(duì)象,使用的是request對(duì)象
HttpSession session = request.getSession();
Session對(duì)象提供的功能:
- 存儲(chǔ)數(shù)據(jù)到 session 域中
void setAttribute(String name, Object o)
- 根據(jù) key,獲取值
Object getAttribute(String name)
- 根據(jù) key,刪除該鍵值對(duì)
void removeAttribute(String name)
Session的原理分析
Session是基于Cookie實(shí)現(xiàn)的
(1)demo1在第一次獲取session對(duì)象的時(shí)候,session對(duì)象會(huì)有一個(gè)唯一的標(biāo)識(shí),假如是id:10
(2)demo1在session中存入其他數(shù)據(jù)并處理完成所有業(yè)務(wù)后,需要通過Tomcat服務(wù)器響應(yīng)結(jié)果給瀏覽器
(3)Tomcat服務(wù)器發(fā)現(xiàn)業(yè)務(wù)處理中使用了session對(duì)象,就會(huì)把session的唯一標(biāo)識(shí)id:10當(dāng)做一個(gè)cookie,添加Set-Cookie:JESSIONID=10到響應(yīng)頭中,并響應(yīng)給瀏覽器
(4)瀏覽器接收到響應(yīng)結(jié)果后,會(huì)把響應(yīng)頭中的coookie數(shù)據(jù)存儲(chǔ)到瀏覽器的內(nèi)存中
(5)瀏覽器在同一會(huì)話中訪問demo2的時(shí)候,會(huì)把cookie中的數(shù)據(jù)按照cookie: JESSIONID=10的格式添加到請(qǐng)求頭中并發(fā)送給服務(wù)器Tomcat
(6)demo2獲取到請(qǐng)求后,從請(qǐng)求頭中就讀取cookie中的JSESSIONID值為10,然后就會(huì)到服務(wù)器內(nèi)存中尋找id:10的session對(duì)象,如果找到了,就直接返回該對(duì)象,如果沒有則新創(chuàng)建一個(gè)session對(duì)象
(7)關(guān)閉打開瀏覽器后,因?yàn)闉g覽器的cookie已被銷毀,所以就沒有JESSIONID的數(shù)據(jù),服務(wù)端獲取到的session就是一個(gè)全新的session對(duì)象
Session的使用細(xì)節(jié)
Session的鈍化與活化
鈍化:在服務(wù)器正常關(guān)閉后,Tomcat會(huì)自動(dòng)將Session數(shù)據(jù)寫入硬盤的文件中
活化:再次啟動(dòng)服務(wù)器后,從文件中加載數(shù)據(jù)到Session中,路徑中的SESSIONS.ser文件會(huì)被刪除
(session的鈍化與活化都是服務(wù)器自動(dòng)完成的)
session的數(shù)據(jù)存儲(chǔ)在服務(wù)端,服務(wù)器重啟session數(shù)據(jù)會(huì)被保存,但瀏覽器重啟后相當(dāng)于建立新的會(huì)話,獲取session數(shù)據(jù)是一個(gè)新的對(duì)象
因此,session并不能長(zhǎng)期保存數(shù)據(jù),cookie是存儲(chǔ)在客戶端,可以長(zhǎng)期保存
Session銷毀
默認(rèn)情況下,無操作后30min銷毀(可以在web.xml中配置銷毀時(shí)間)
調(diào)用Session對(duì)象的invalidate()進(jìn)行銷毀
// 獲取Session對(duì)象
HttpSession session = request.getSession();
System.out.println(session);
// 銷毀
session.invalidate();
Cookie和Session的區(qū)別和應(yīng)用場(chǎng)景
Cookie和Session的應(yīng)用場(chǎng)景分別是什么?
- 區(qū)別:
- 存儲(chǔ)位置:Cookie 是將數(shù)據(jù)存儲(chǔ)在客戶端,Session 將數(shù)據(jù)存儲(chǔ)在服務(wù)端
- 安全性:Cookie不安全,Session安全
- 數(shù)據(jù)大小:Cookie最大3KB,Session無大小限制
- 存儲(chǔ)時(shí)間:Cookie可以通過setMaxAge()長(zhǎng)期存儲(chǔ),Session默認(rèn)30分鐘
- 服務(wù)器性能:Cookie不占服務(wù)器資源,Session占用服務(wù)器資源
- 應(yīng)用場(chǎng)景:
- 購物車:使用Cookie來存儲(chǔ)
- 以登錄用戶的名稱展示:使用Session來存儲(chǔ)
- 記住我功能:使用Cookie來存儲(chǔ)
- 驗(yàn)證碼:使用session來存儲(chǔ)
- 結(jié)論
- Cookie是用來保證用戶在未登錄情況下的身份識(shí)別
- Session是用來保存用戶登錄后的數(shù)據(jù)