jsp中cookie的用法_第1頁
jsp中cookie的用法_第2頁
jsp中cookie的用法_第3頁
jsp中cookie的用法_第4頁
jsp中cookie的用法_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、.jsp中cookie的用法jsp中cookie的用法! 一.什么是cookies 大家都知道,瀏覽器與WEB服務(wù)器之間是使用HTTP協(xié)議進(jìn)行通信的,當(dāng)某個(gè)用戶發(fā)出頁面請求時(shí),WEB服務(wù)器只是簡單的進(jìn)行響應(yīng),然后就關(guān)閉與該用戶的連接。因此當(dāng)一個(gè)請求發(fā)送到WEB服務(wù)器時(shí),無論其是否是第一次來訪,服務(wù)器都會把它當(dāng)作第一次來對待,這樣的不好之處可想而知。為了彌補(bǔ)這個(gè)缺陷,Netscape開發(fā)出了cookie這個(gè)有效的工具來保存某個(gè)用戶的識別信息,因此人們昵稱為“小甜餅”。cookies是一種WEB服務(wù)器通過瀏覽器在訪問者的硬盤上存儲信息的手段:Netscape Navigator使用一個(gè)名為cook

2、ies.txt本地文件保存從所有站點(diǎn)接收的Cookie信息;而IE瀏覽器把Cookie信息保存在類似于C:windowscookies的目錄下。當(dāng)用戶再次訪問某個(gè)站點(diǎn)時(shí),服務(wù)端將要求瀏覽器查找并返回先前發(fā)送的Cookie信息,來識別這個(gè)用戶。 cookies給網(wǎng)站和用戶帶來的好處非常多: 1、Cookie能使站點(diǎn)跟蹤特定訪問者的訪問次數(shù)、最后訪問時(shí)間和訪問者進(jìn)入站點(diǎn)的路徑 2、Cookie能告訴在線廣告商廣告被點(diǎn)擊的次數(shù),從而可以更精確的投放廣告 3、Cookie有效期限未到時(shí),Cookie能使用戶在不鍵入密碼和用戶名的情況下進(jìn)入曾經(jīng)瀏覽過的一些站點(diǎn) 4、Cookie能幫助站點(diǎn)統(tǒng)計(jì)用戶個(gè)人資料

3、以實(shí)現(xiàn)各種各樣的個(gè)性化服務(wù) 在JSP中,我們也可以使用Cookie,來編寫一些功能強(qiáng)大的應(yīng)用程序。 下面,我想介紹一下如何用JSP創(chuàng)建和處理Cookie。 二如何創(chuàng)建Cookie 說了這么多,大家一定很想知道JSP是如何創(chuàng)建cookie了。JSP是使用如下的語法格式來創(chuàng)建cookie的: Cookie cookie_name =new Cookie("Parameter","Value"); 例如:Cookie newCookie =new Cookie("username","waynezheng"); resp

4、onse.addCookie(newCookie); 解釋:JSP是調(diào)用Cookie對象相應(yīng)的構(gòu)造函數(shù)Cookie(name,value)用合適的名字和值來創(chuàng)建Cookie,然后Cookie可以通過HttpServletResponse的addCookie方法加入到Set-Cookie應(yīng)答頭,本例中Cookie對象有兩個(gè)字符串參數(shù):username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符: : ;? , " / ( ) = 處理Cookie的屬性 看到這里,有的朋友又要問了:我光知道如何創(chuàng)建Cookie有什么用呀?是呀,光知道如何創(chuàng)建Cookie而不知道怎

5、么使用是不夠的。在JSP中,程序是通過cookie.setXXX設(shè)置各種屬性,用cookie.getXXX讀出cookie的屬性,現(xiàn)把Cookie的主要屬性,及其方法列于下,供大家參考: 類型方法名方法解釋 String getComment() 返回cookie中注釋,如果沒有注釋的話將返回空值. String getDomain() 返回cookie中Cookie適用的域名. 使用getDomain() 方法可以指示瀏覽器把Cookie返回給同一域內(nèi)的其他服務(wù)器,而通常Cookie只返回給與發(fā)送它的服務(wù)器名字完全相同的服務(wù)器。注意域名必須以點(diǎn)開始(例如) int getMaxAge() 返

6、回Cookie過期之前的最大時(shí)間,以秒計(jì)算。 String getName() 返回Cookie的名字。名字和值是我們始終關(guān)心的兩個(gè)部分,筆者會在后面詳細(xì)介紹getName/setName。 String getPath() 返回Cookie適用的路徑。如果不指定路徑,Cookie將返回給當(dāng)前頁面所在目錄及其子目錄下的所有頁面。 boolean getSecure() 如果瀏覽器通過安全協(xié)議發(fā)送cookies將返回true值,如果瀏覽器使用標(biāo)準(zhǔn)協(xié)議則返回false值。 String getValue() 返回Cookie的值。筆者也將在后面詳細(xì)介紹getValue/setValue。 int

7、getVersion() 返回Cookie所遵從的協(xié)議版本。 void setComment(String purpose) 設(shè)置cookie中注釋。 void setDomain(String pattern) 設(shè)置cookie中Cookie適用的域名 void setMaxAge(int expiry) 以秒計(jì)算,設(shè)置Cookie過期時(shí)間。 void setPath(String uri) 指定Cookie適用的路徑。 void setSecure(boolean flag) 指出瀏覽器使用的安全協(xié)議,例如HTTPS或SSL。 void setValue(String newValue)

8、cookie創(chuàng)建后設(shè)置一個(gè)新的值。 void setVersion(int v) 設(shè)置Cookie所遵從的協(xié)議版本。 讀取客戶端的Cookie 在Cookie發(fā)送到客戶端前,先要?jiǎng)?chuàng)建一個(gè)Cookie,然后用addCookie方法發(fā)送一個(gè)HTTP Header。JSP將調(diào)用request.getCookies()從客戶端讀入Cookie,getCookies()方法返回一個(gè)HTTP請求頭中的內(nèi)容對應(yīng)的Cookie對象數(shù)組。你只需要用循環(huán)訪問該數(shù)組的各個(gè)元素,調(diào)用getName方法檢查各個(gè)Cookie的名字,直至找到目標(biāo)Cookie,然后對該Cookie調(diào)用getValue方法取得與指定名字關(guān)聯(lián)的

9、值。 例如 < String userName=request.getParameter("username");/從提交的HTML表單中獲取,用戶名 Cookie theUsername=new Cookie("username",userName);/以"username",userName值/對創(chuàng)建一個(gè)Cookie response.addCookie(theUsername); > . < Cookie myCookie=request.getCookies();/創(chuàng)建一個(gè)Cookie對象數(shù)組 for(int

10、 n=0;n=cookie.length-1;i+);/設(shè)立一個(gè)循環(huán),來訪問Cookie對象數(shù)組的每一個(gè)元素 Cookie newCookie= myCookien; if(newCookie.getName().equals("username"); /判斷元素的值是否為username中的值 > 你好,<=newCookie.getValue()>!/如果找到后,向他問好 < > 設(shè)置Cookie的存在時(shí)間,及刪除Cookie 在JSP中,使用setMaxAge(int expiry)方法來設(shè)置Cookie的存在時(shí)間,參數(shù)expiry應(yīng)是一

11、個(gè)整數(shù)。正值表示cookie將在這么多秒以后失效。注意這個(gè)值是cookie將要存在的最大時(shí)間,而不是cookie現(xiàn)在的存在時(shí)間。負(fù)值表示當(dāng)瀏覽器關(guān)閉時(shí),Cookie將會被刪除。零值則是要?jiǎng)h除該Cookie。如: < Cookie deleteNewCookie=new Cookie("newcookie",null); deleteNewCookie.setMaxAge(0); deleteNewCookie.setPath("/"); response.addCookie(deleteNewCookie); > 三。需要注意的一些問題 通過

12、上面兩個(gè)簡單的例子,可以看到,用JSP進(jìn)行Cookie的操作,是非常簡單的。不過我們在實(shí)際操作中還要注意一些問題: 1. Cookie的兼容性問題 Cookie的格式有2個(gè)不同的版本,第一個(gè)版本,我們稱為Cookie Version 0,是最初由Netscape公司制定的,也被幾乎所有的瀏覽器支持。而較新的版本,Cookie Version 1,則是根據(jù)RFC 2109文檔制定的。為了確保兼容性,JAVA規(guī)定,前面所提到的涉及Cookie的操作都是針對舊版本的Cookie進(jìn)行的。而新版本的Cookie目前還不被Javax.servlet.http.Cookie包所支持。 2. Cookie的內(nèi)

13、容 同樣的Cookie的內(nèi)容的字符限制針對不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格,方括號,圓括號,等于號(=),逗號,雙引號,斜杠,問號,符號,冒號,分號都不能作為Cookie的內(nèi)容。這也就是為什么我們在例子中設(shè)定Cookie的內(nèi)容為"Test_Content"的原因。 雖然在Cookie Version 1規(guī)定中放寬了限制,可以使用這些字符,但是考慮到新版本的Cookie規(guī)范目前仍然沒有為所有的瀏覽器所支持,因而為保險(xiǎn)起見,我們應(yīng)該在Cookie的內(nèi)容中盡量避免使用這些字符。 1. Cookie有個(gè)適用路徑的問題,

14、 就是說如果 writecookie.jsp和readcookie.jsp要放在同意目錄下, 如果不在同一目錄下, 則寫的時(shí)候需要設(shè)置路徑,為readcookie.jsp所在的路徑. 2. 讀入Cookie數(shù)組的時(shí)候需要判斷是否為空(null), 網(wǎng)上很多代碼都沒有寫出這一點(diǎn). 四.中文亂碼 String value = .URLEncoder.encode(“中文”); Cookie cookie = new Cookie("key",value); response.addCookie(cookie); 然后在jsp頁面中使用: <% for(int i = 0

15、;i < cookies.length ; i +) temp = cookiesi; if(temp.getName().equals("key") out.print(.URLDecoder.decode(temp.getValue(); %>這樣就解決問題了 關(guān)鍵在于使用 .URLEncoder.encode(中文);的字符傳遞,使用: .URLDecoder.decode(轉(zhuǎn)換后的字符); 附錄:JSP中對Cookie的操作: 類型方法名方法解釋 StringgetComment()返回cookie中注釋,如果沒有注釋的話將返回空值. Stringget

16、Domain()返回cookie中Cookie適用的域名. 使用getDomain() 方法可以指示瀏覽器把Cookie返回給同一域內(nèi)的其他服務(wù)器,而通常Cookie只返回給與發(fā)送它的服務(wù)器名字完全相同的服務(wù)器。注意域名必須以點(diǎn)開始 intgetMaxAge()返回Cookie過期之前的最大時(shí)間,以秒計(jì)算。 StringgetName()返回Cookie的名字 StringgetPath()返回Cookie適用的路徑。如果不指定路徑,Cookie將返回給當(dāng)前頁面所在目錄及其子目錄下的所有頁面。 booleangetSecure()如果瀏覽器通過安全協(xié)議發(fā)送cookies將返回true值,如果瀏覽器使用標(biāo)準(zhǔn)協(xié)議則返回false值。 StringgetValue()返回Cookie的值。筆者也將在后面詳細(xì)介紹getValue/setValue。 intgetVersion()返回Cookie所遵從的協(xié)議版本。 voidsetComment(String purpose)設(shè)置cookie中注釋 voidsetDo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論