HTTP協(xié)議的無(wú)狀態(tài)
1. 在HTTP協(xié)議中無(wú)狀態(tài)的優(yōu)缺點(diǎn)
a) HTTP交互是無(wú)狀態(tài)的
無(wú)狀態(tài)是指,當(dāng)瀏覽器發(fā)送請(qǐng)求給服務(wù)器的時(shí)候,服務(wù)器響應(yīng),但是同一個(gè)瀏覽器再發(fā)送請(qǐng)求給服務(wù)器的時(shí)候,他會(huì)響應(yīng),但是他不知道你就是剛才那個(gè)瀏覽器。
b) 優(yōu)點(diǎn)
i. 客戶(hù)瀏覽器不會(huì)注意到服務(wù)器出現(xiàn)故障并重啟.
ii. 在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快
c) 缺點(diǎn)
i. 對(duì)于事務(wù)處理沒(méi)有記憶能力,可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大
ii. 很難產(chǎn)生收集信息去產(chǎn)生良好用戶(hù)體驗(yàn)的一組頁(yè)面.
2. HTTP如果有狀態(tài)的好處
a) 減少數(shù)據(jù)的傳送量
b) 認(rèn)證網(wǎng)頁(yè)可以收集用戶(hù)的認(rèn)證信息
c) 可以定義用戶(hù)的對(duì)網(wǎng)頁(yè)的訪(fǎng)問(wèn)權(quán)限
Cookie的原理和應(yīng)用
1. Cookie
a) 定義:
是一種由服務(wù)器發(fā)送給客戶(hù)的片段信息,存儲(chǔ)在客戶(hù)端瀏覽器的內(nèi)在中或硬盤(pán)上,在客戶(hù)隨后對(duì)該服務(wù)器的請(qǐng)求中發(fā)回它。
b) Cookie規(guī)范:
i. Netscape規(guī)范(版本0):
ii. RFC2109(HTTP狀態(tài)管理機(jī)制,版本1):http://www.ietf.org/rfc
c) 響應(yīng)報(bào)頭:
Set-Cookie: NAME=VALUE; Comment=value; Domain=value; Max-Age=value; Path=value; Secure; Version=1*DIGIT
d) 其他
Cookie中文譯為小甜餅,是由Netscape公司發(fā)明的。Netscape公司也是最早開(kāi)發(fā)瀏覽器的公司,在互聯(lián)網(wǎng)剛剛發(fā)展的前期,它憑借著先入為主的優(yōu)勢(shì)Netscape也曾經(jīng)成為最流行的瀏覽器。但由于windows95的普及,微軟公司將IE瀏覽器與windows進(jìn)行綁定銷(xiāo)售,Netscape逐漸銷(xiāo)聲匿跡,不為人知了。但現(xiàn)在大多數(shù)的互聯(lián)網(wǎng)協(xié)議與規(guī)范都源于Netscape公司的產(chǎn)品。Cookie就是其中之后。它是一種由服務(wù)器發(fā)送給客戶(hù)的片段信息,它可以存儲(chǔ)在客戶(hù)端瀏覽器的內(nèi)在中或硬盤(pán)上,然后在客戶(hù)隨后對(duì)該服務(wù)器的請(qǐng)求中發(fā)回它。Cookie目前遵循的規(guī)范主要是兩種,一個(gè)就是Netscape規(guī)范,它的規(guī)范文件可以在找到。另一個(gè)是RFC2109,它的規(guī)范文件可以在上找到。這兩個(gè)規(guī)范,規(guī)定了在HTTP協(xié)議中,關(guān)于cookie的報(bào)頭的形式。比如,在RFC2109規(guī)范中,規(guī)定了響應(yīng)報(bào)頭的形式是這樣子的。Name是cookie的名字,vlue是它的值。Name=value屬性-值對(duì)必須首先出現(xiàn),在此之后的屬性值對(duì)可以以任何順序出現(xiàn)。Comment屬性是可選的,因?yàn)閏ookies可能包含關(guān)于用戶(hù)私有的信息,這個(gè)屬性允許服務(wù)器說(shuō)明這個(gè)cookie的使用,用戶(hù)可以檢查這個(gè)信息,然后決定是否加入或繼續(xù)會(huì)話(huà)。 Domain屬性是可選的,用于指定Cookie在哪一個(gè)域有效,所指定的域必須以點(diǎn)號(hào)開(kāi)始。Max-age屬性是可選可的,用于定義Cookie的生存時(shí)間,以秒為單位,如果超過(guò)了這個(gè)時(shí)間,客戶(hù)端應(yīng)該丟棄這個(gè)cookie,如果指定的秒數(shù)為0,表示這個(gè)cookie應(yīng)該立即被丟棄。Path屬性是可選的,用于指定這個(gè)cookie在哪一個(gè)URL子集下有效。Secure屬性是可選的,它沒(méi)有值,用于指示瀏覽器使用安全的方式與服務(wù)器交互。Version屬性是必需的,它的值是一個(gè)十進(jìn)制的整數(shù),標(biāo)識(shí)cookie依照的狀態(tài)管理規(guī)范的版本,對(duì)于RFC2109 Version應(yīng)該設(shè)為1.
2. 使用Cookie編程
a) 特點(diǎn)
i. 以鍵-值對(duì)的方式記錄會(huì)話(huà)跟蹤的內(nèi)容
ii. Cookie的持久性較高
iii. 用戶(hù)可以手動(dòng)限制cookie的使用
iv. Session可以用來(lái)替代Cookie
3. 設(shè)置一個(gè)Cookie
a) 創(chuàng)建cookie:
Cookie c = new Cookie("MyName", "MyValue");
b) Cookie的方法:
i. getConnment()、setComment(String purpose)
ii. getDomain()、setDomain(String pattern)
iii. getMaxAge()、setMaxAge(int expiry)
iv. getName()、getValue()
v. setValue(String newValue)
vi. getPath()、setpath(String uri)
c) 使用cookie
i. Response.addCookie()
ii. Request.getCoonkie()
4. 實(shí)例—登錄程序
a) 功能:
i. 使用cookie來(lái)保存用戶(hù)登錄信息
ii. 初次登錄,將信息保存到客戶(hù)端的硬盤(pán)上
iii. 再次訪(fǎng)問(wèn),先驗(yàn)證用戶(hù)登錄信息,通過(guò)后顯示歡迎信息
b) 步驟:
i. 第一步:編寫(xiě)LoginServlet.java和GreetServlet.java
ii. 第二步:編譯JAVA源文件
iii. 第三步:部署servlet
5. 實(shí)例—LoginSerlvet
6. 實(shí)例—GreetServlet
7. 向?yàn)g覽器輸出會(huì)話(huà)
a) Cookie
i. 跟蹤跟瀏覽器有關(guān)的會(huì)話(huà)
ii. 有些瀏覽器不支持
iii. 有些用戶(hù)由于安全原因不使用
b) 重寫(xiě)URL
i. 通過(guò)一個(gè)請(qǐng)求URL的會(huì)話(huà)ID把一個(gè)會(huì)話(huà)綁定到一個(gè)瀏覽器上
ii. 耗費(fèi)時(shí)間去掃描頁(yè)面和URL重定向
iii. 使用encodeURL()和encodeRedirectURL()
Session的原理和應(yīng)用
1. Session
a) 定義:
i. 一個(gè)瀏覽器到一個(gè)服務(wù)器相關(guān)的HTTP交互的集合.
ii. 是被瀏覽器訪(fǎng)問(wèn)的Servlet獲取的與那些交互相關(guān)的數(shù)據(jù)集合.
b) javax.servlet.http.HttpSession支持的接口.
2. HttpSession接口
a) HttpSession接口中的方法
i. public Object getAttribute(String name)
ii. public void setAttribute(String name,Object value)
iii. public void removeAttribute(String name)
iv. public int setMaxInactiveInterval()
v. public void invalidate()
3. 補(bǔ)充說(shuō)明
a) Servlet運(yùn)行就會(huì)創(chuàng)建會(huì)話(huà).
b) Servlet可以通過(guò)下面的方法來(lái)獲得session對(duì)象:
getSession()
c) 任何servlet可以請(qǐng)求創(chuàng)建會(huì)話(huà).
d) 對(duì)處理目標(biāo)瀏覽器中請(qǐng)求的所有Servlet都可以訪(fǎng)問(wèn)會(huì)話(huà)中的信息.
e) 會(huì)話(huà)會(huì)由于瀏覽器的不活躍而超時(shí)而失效。
4. Cookie和Session比較
a) session
i. 由服務(wù)器端創(chuàng)建
ii. 由服務(wù)端保存信息
iii. 打開(kāi)新的瀏覽器,就會(huì)開(kāi)始一次新的會(huì)話(huà)
b) Cookie
i. 由服務(wù)器發(fā)送給客戶(hù)端的片段信息,存儲(chǔ)在客戶(hù)端瀏覽器的內(nèi)存中或硬盤(pán)上。
ii. 由客戶(hù)端保存信息
iii. 在cookie有效期間內(nèi),多個(gè)瀏覽器可訪(fǎng)問(wèn)同一個(gè)cookie對(duì)象
回顧C(jī)ookie和Session
Cookie在一個(gè)瀏覽器中存儲(chǔ)一個(gè)變量和對(duì)應(yīng)的值.
Cookie可以由瀏覽器用戶(hù)配置.
不是所有的瀏覽器都支持Cookie.
可以使用addCookie()和getCookie ()方法獲取Cookie.
session是由瀏覽器和網(wǎng)絡(luò)服務(wù)器之間的交互所關(guān)聯(lián)的數(shù)據(jù)集合.
每打開(kāi)一個(gè)瀏覽器,就會(huì)創(chuàng)建一個(gè)新的session對(duì)象
會(huì)話(huà)開(kāi)發(fā)時(shí)存在下列方法:
getSession()
setAttribute(key, value)
getAttribute(key)
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄