会话(cookie的使用,路径和Session的工作原理,使用)
1.狀態(tài)管理----Cookie
1.1 為什么需要狀態(tài)管理
?HTTP協(xié)議是無(wú)狀態(tài)的,不能保存每次提交的信息,即當(dāng)服務(wù)器返回與請(qǐng)求相對(duì)應(yīng)的應(yīng)答之后,這次事務(wù)的所有信息就丟掉了。
如果用戶發(fā)來(lái)一個(gè)新的請(qǐng)求,服務(wù)器無(wú)法知道它是否與上次的請(qǐng)求有聯(lián)系。
對(duì)于那些需要多次提交數(shù)據(jù)才能完成的Web操作,比如登錄來(lái)說(shuō),就成問(wèn)題了。
1.1.1 什么是狀態(tài)管理(會(huì)話管理)
指的是一個(gè)客戶端的瀏覽器到WEB服務(wù)器之間連續(xù)發(fā)生的一系列請(qǐng)求和響應(yīng)的過(guò)程。
(相當(dāng)于打電話)從打開瀏覽器訪問(wèn)某個(gè)網(wǎng)站到關(guān)閉該網(wǎng)站的過(guò)程我們稱為一次會(huì)話。
1.1.2狀態(tài)管理的兩種常見的模式;
客戶端狀態(tài)管理技術(shù):將狀態(tài)存放在客戶端。代表性的是Cookie技術(shù)(瀏覽器)
服務(wù)器狀態(tài)管理技術(shù):將狀態(tài)存放在服務(wù)器中。代表的是Session.
1.2.Cookie應(yīng)用
1.2.1什么是Cookie
Cookie的創(chuàng)建是由服務(wù)器創(chuàng)建,服務(wù)端調(diào)用相關(guān)的方法將Cookie響應(yīng)給客戶端
一個(gè)Cookie只能標(biāo)識(shí)一種信息,它至少含有一個(gè)標(biāo)識(shí)該信息的名稱(name)和設(shè)置值(value)。
說(shuō)明:Cookie 是由鍵值對(duì)方式存儲(chǔ)數(shù)據(jù)? name:jack
一個(gè)WEB站可以給一個(gè)WEB瀏覽器發(fā)送多個(gè)Cookie,一個(gè)WEB瀏覽器也可以存儲(chǔ)多個(gè)WEB站點(diǎn)
提供的Cookie。
1.2.2Cookie的使用
步驟:
1.創(chuàng)建Cookie
Cookie cookie=new Cookie(“name”,“jack");//鍵值對(duì)
2.設(shè)置Cookie的路徑
cookie.setPath("/")
3.設(shè)置Cookie的生存時(shí)間
cookie.setMaxAge(-1)//關(guān)閉瀏覽器結(jié)束4.把Cookie響應(yīng)到瀏覽器
response.addCookie(cookie);
1.2.3如何查詢Cookie
//獲取客戶端的Cookie 存儲(chǔ)多個(gè),要用數(shù)組
Cookie [] cookies=request.getCookies();
ifcookies!=null)
{
for(Cookie cookie : cookies){
if(cookie.getName().equals(name))
{
? String value=cookie.getValue();
System.out.println(value);
}
}
}
1.2.4如何修改Cookie
只要保證Cookie名和路徑一致就行
//先得到指定的Cookie
1.2.5如何刪除Cookie
?1.3 Cookie的生存周期
cookies.setMaxAge(-1);//設(shè)置生成時(shí)間
括號(hào)的取值:
>0有效期,單位是秒
=0失效,用于刪除Cookie
<0 內(nèi)存存儲(chǔ),關(guān)閉瀏覽器失效
1.4 Cookie的編碼與解碼(8.0版本及之前的版本存儲(chǔ)中文需要編碼與解碼)
中文和英文字符不同,中文屬于Unicode字符,在內(nèi)存中占用4個(gè)字符,而英文屬于ASCII字符,內(nèi)存中只占2個(gè)字節(jié)。Cookie中使用Unicode字符時(shí)需要對(duì)Unicode字符進(jìn)行編碼,否則會(huì)出現(xiàn)亂碼。編碼可以使用java.net.URLEncoder類的encode(String str,String encoding)方法,解碼使用java.net.URLDecoder類的decode(String str,String encoding)方法
代碼:
運(yùn)行結(jié)果:
1.5 Cookie的路徑問(wèn)題
1.5.1什么是Cookie的路徑問(wèn)題
?
1.5.2 發(fā)送Cookie的條件
瀏覽器在發(fā)送請(qǐng)求之前,首先會(huì)根據(jù)請(qǐng)求url中的域名在cookie列表中找所有與當(dāng)前域名一樣的cookie,然后再根據(jù)指定的路徑進(jìn)行匹配,如果當(dāng)前請(qǐng)求在域匹配的基礎(chǔ)上還與路徑匹配那么就會(huì)將所有匹配的cookie發(fā)送給服務(wù)器,這里要注意的是最大匹配和最小匹配問(wèn)題,有些cookie服務(wù)器在發(fā)送之前會(huì)有意擴(kuò)大當(dāng)前頁(yè)面cookie的匹配范圍,此時(shí)這些被擴(kuò)大范圍的cookie也會(huì)一起發(fā)送給服務(wù)器。
例如:cookie? 存在于: http://localhost:8080/day13_cookie_01/
?如果:發(fā)送的請(qǐng)求是:http://localhost:8080/day14/aServlet 的話,則不發(fā)送cookie到服務(wù)端
?? ??? ??? ??? ??? ? ? ? ? ? ? ? ? ? ? http://localhost:8080/day13_cookie_01/aServlet能發(fā)送cookie到服務(wù)器
1.6 Cookie的特點(diǎn)
優(yōu)點(diǎn):
1.可配置到期規(guī)則 Cookie 可以在瀏覽器會(huì)話結(jié)束時(shí)到期,或者可以在客戶端計(jì)算機(jī)上無(wú)限期存在,這取決于客戶端的到期規(guī)則。
2.不需要任何服務(wù)器資源 Cookie 存儲(chǔ)在客戶端并在發(fā)送后由服務(wù)器讀取。
3.簡(jiǎn)單性 Cookie 是一種基于文本的輕量結(jié)構(gòu),包含簡(jiǎn)單的鍵值對(duì)。
4.數(shù)據(jù)持久性 雖然客戶端計(jì)算機(jī)上 Cookie 的持續(xù)時(shí)間取決于客戶端上的 Cookie 過(guò)期處理和用戶干預(yù),
Cookie 通常是客戶端上持續(xù)時(shí)間最長(zhǎng)的數(shù)據(jù)保留形式
5.cookie.setMaxAge(時(shí)間);//單位秒
缺點(diǎn):
1.大小受到限制 大多數(shù)瀏覽器對(duì) Cookie 的大小有 4096 字節(jié)的限制,盡管在當(dāng)今新的瀏覽器和客戶端設(shè)備版本中,支持 8192 字節(jié)的 Cookie 大小已愈發(fā)常見。
2.安全性低,存在于客戶端
3.加密和解密需要額外的編碼,另外解碼和解密耗費(fèi)一定的時(shí)間而影響應(yīng)用程序的性能
2. 狀態(tài)管理---Session
2.1 Session概述
2.1.1什么是Session
Session用于跟蹤客戶的狀態(tài)。
Session指的是在一段時(shí)間內(nèi),單個(gè)客戶與Web服務(wù)器的一連串相關(guān)的交互過(guò)程。
在一個(gè)Session中,客戶可能會(huì)多次請(qǐng)求訪問(wèn)同一個(gè)網(wǎng)頁(yè),也有可能請(qǐng)求訪問(wèn)各種不同的服務(wù)器資源。
2.1.2 Session 工作原理
http:無(wú)狀態(tài) 無(wú)連接
session被用于表示一個(gè)持續(xù)的連接狀態(tài),在網(wǎng)站訪問(wèn)中一般指代客戶端瀏覽器的進(jìn)程從開啟到結(jié)束的過(guò)程。session其實(shí)就是網(wǎng)站分析的訪問(wèn)(visits)度量,表示一個(gè)訪問(wèn)的過(guò)程。
session的常見實(shí)現(xiàn)形式是會(huì)話cookie(session cookie),即未設(shè)置過(guò)期時(shí)間的cookie,這個(gè)cookie的默認(rèn)生命周期為瀏覽器會(huì)話期間,只要關(guān)閉瀏覽器窗口,cookie就消失了。
實(shí)現(xiàn)機(jī)制是當(dāng)用戶發(fā)起一個(gè)請(qǐng)求的時(shí)候,服務(wù)器會(huì)檢查該請(qǐng)求中是否包含sessionid,如果未包含,則系統(tǒng)會(huì)創(chuàng)造一個(gè)名為JSESSIONID的輸出 cookie返回給瀏覽器(只放入內(nèi)存,并不存在硬盤中),并將其以HashTable的形式寫到服務(wù)器的內(nèi)存里面;當(dāng)已經(jīng)包含sessionid是,服務(wù)端會(huì)檢查找到與該session相匹配的信息,如果存在則直接使用該sessionid,若不存在則重新生成新的 session。
這里需要注意的是session始終是有服務(wù)端創(chuàng)建的,并非瀏覽器自己生成的。 但是瀏覽器的cookie被禁止后session就需要用get方法的URL重寫的機(jī)制或使用POST方法提交隱藏表單的形式來(lái)實(shí)現(xiàn)
2.1.3 如何獲得Session
2.1.4 如何使用session綁定對(duì)象
使用HttpSession的setAttribute(屬性名,object)方法
2.1.5 如何刪除Session
使用HttpSession的invalidate方法
2.2 Session超時(shí)
2.2.1什么是Session超時(shí)
HttpSession的最后一程訪問(wèn)時(shí)間和當(dāng)前時(shí)間的差距大于了 指定的最大空閑時(shí)間,這時(shí)服務(wù)器
就會(huì)銷毀Session對(duì)象。默認(rèn)的空閑時(shí)間為30分鐘。
2.2.2如何修改Session的缺省時(shí)間限制
使用HttpSession的setMaxAge設(shè)置,單位為秒
2.2.3 Session 失效的幾種情況
1.超過(guò)了設(shè)置的超時(shí)時(shí)間
2.主動(dòng)調(diào)用了invalidate方法
3.服務(wù)器主動(dòng)或異常關(guān)閉
注意:瀏覽器關(guān)閉并不會(huì)讓Session失效
Session和Cookie的區(qū)別
1,session存放在服務(wù)器端,cookie存放在客戶端。
2,session會(huì)隨著會(huì)話的結(jié)束而關(guān)閉,cookie則存放在客戶端瀏覽器上長(zhǎng)期有效。
3,session保存的是對(duì)象,cookie保存的是字符串
4,存放在cookie里的信息容易泄露,通常只保存不重要的信息,重要的信息放在session中
轉(zhuǎn)載于:https://www.cnblogs.com/wanghuaying/p/9557210.html
總結(jié)
以上是生活随笔為你收集整理的会话(cookie的使用,路径和Session的工作原理,使用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 位运算笔记
- 下一篇: linux 进程简介