亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1690 | 回復(fù): 0
打印 上一主題 下一主題

JSP開(kāi)發(fā)中Cookie使用完全詳解 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-10-26 11:43 |只看該作者 |倒序?yàn)g覽

什么是cookies
大家都知道,瀏覽器與WEB服務(wù)器之間是使用HTTP協(xié)議進(jìn)行通信的,當(dāng)某個(gè)用戶(hù)發(fā)出頁(yè)面請(qǐng)求時(shí),WEB服務(wù)器只是簡(jiǎn)單的進(jìn)行響應(yīng),然后就關(guān)閉與該用戶(hù)的連接。因此當(dāng)一個(gè)請(qǐng)求發(fā)送到WEB服務(wù)器時(shí),無(wú)論其是否是第一次來(lái)訪,服務(wù)器都會(huì)把它當(dāng)作第一次來(lái)對(duì)待,這樣的不好之處可想而知。為了彌補(bǔ)這個(gè)缺陷,Netscape開(kāi)發(fā)出了cookie這個(gè)有效的工具來(lái)保存某個(gè)用戶(hù)的識(shí)別信息,因此人們昵稱(chēng)為“小甜餅”。cookies是一種WEB服務(wù)器通過(guò)瀏覽器在訪問(wèn)者的硬盤(pán)上存儲(chǔ)信息的手段:Netscape Navigator使用一個(gè)名為cookies.txt本地文件保存從所有站點(diǎn)接收的Cookie信息;而IE瀏覽器把Cookie信息保存在類(lèi)似于C:\\windows\\cookies的目錄下。當(dāng)用戶(hù)再次訪問(wèn)某個(gè)站點(diǎn)時(shí),服務(wù)端將要求瀏覽器查找并返回先前發(fā)送的Cookie信息,來(lái)識(shí)別這個(gè)用戶(hù)。
cookies給網(wǎng)站和用戶(hù)帶來(lái)的好處非常多:
1. Cookie能使站點(diǎn)跟蹤特定訪問(wèn)者的訪問(wèn)次數(shù)、最后訪問(wèn)時(shí)間和訪問(wèn)者進(jìn)入站點(diǎn)的路徑
2. Cookie能告訴在線廣告商廣告被點(diǎn)擊的次數(shù),從而可以更精確的投放廣告
3. Cookie有效期限未到時(shí),Cookie能使用戶(hù)在不鍵入密碼和用戶(hù)名的情況下進(jìn)入曾經(jīng)瀏覽過(guò)的一些站點(diǎn)
4. Cookie能幫助站點(diǎn)統(tǒng)計(jì)用戶(hù)個(gè)人資料以實(shí)現(xiàn)各種各樣的個(gè)性化服務(wù)
在JSP中,我們也可以使用Cookie,來(lái)編寫(xiě)一些功能強(qiáng)大的應(yīng)用程序。
創(chuàng)建Cookie
import="javax.servlet.http.Cookie"
說(shuō)了這么多,大家一定很想知道JSP是如何創(chuàng)建cookie了。JSP是使用如下的語(yǔ)法格式來(lái)創(chuàng)建cookie的:
Cookie cookie_name =new Cookie("Parameter","Value");
例如:
Cookie username_Cookie =new Cookie("username","waynezheng");
response.addCookie(username_Cookie);
解釋?zhuān)篔SP是調(diào)用Cookie對(duì)象相應(yīng)的構(gòu)造函數(shù)Cookie(name,value)用合適的名字和值來(lái)創(chuàng)建Cookie,然后Cookie可以通過(guò)HttpServletResponse的addCookie方法加入到Set-Cookie應(yīng)答頭,本例中Cookie對(duì)象有兩個(gè)字符串參數(shù):username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符:
@ : ;? , " / [ ] ( ) =
處理Cookie的屬性
看到這里,有的朋友又要問(wèn)了:我光知道如何創(chuàng)建Cookie有什么用呀?是呀,光知道如何創(chuàng)建Cookie而不知道怎么使用是不夠的。
在JSP中,程序是通過(guò)cookie.setXXX設(shè)置各種屬性,用cookie.getXXX讀出cookie的屬性,現(xiàn)在把Cookie的主要屬性,及其方法列于下,供大家參考:
類(lèi)型
方法名
方法解釋
String
getComment()
返回cookie中注釋,如果沒(méi)有注釋的話將返回空值.
String
getDomain()
返回cookie中Cookie適用的域名. 使用getDomain() 方法可以指示瀏覽器把Cookie返回給同 一域內(nèi)的其他服務(wù)器,而通常Cookie只返回給與發(fā)送它的服務(wù)器名字完全相同的服務(wù)器。注意域名必須以點(diǎn)開(kāi)始(例如.yesky.com)
int
getMaxAge()
返回Cookie過(guò)期之前的最大時(shí)間,以秒計(jì)算。
String
getName()
返回Cookie的名字。名字和值是我們始終關(guān)心的兩個(gè)部分,筆者會(huì)在后面詳細(xì)介紹 getName/setName。
String
getPath()
返回Cookie適用的路徑。如果不指定路徑,Cookie將返回給當(dāng)前頁(yè)面所在目錄及其子目錄下 的所有頁(yè)面。
boolean
getSecure()
如果瀏覽器通過(guò)安全協(xié)議發(fā)送cookies將返回true值,如果瀏覽器使用標(biāo)準(zhǔn)協(xié)議則返回false值。
String
getValue()
返回Cookie的值。筆者也將在后面詳細(xì)介紹getValue/setValue。
int
getVersion()
返回Cookie所遵從的協(xié)議版本。
void
setComment(String purpose)
設(shè)置cookie中注釋。
void
setDomain(String pattern)
設(shè)置cookie中Cookie適用的域名
void
setMaxAge(int expiry)
以秒計(jì)算,設(shè)置Cookie過(guò)期時(shí)間。
void
setPath(String uri)
指定Cookie適用的路徑。
void
setSecure(boolean flag)
指出瀏覽器使用的安全協(xié)議,例如HTTPS或SSL。
void
setValue(String newValue)
cookie創(chuàng)建后設(shè)置一個(gè)新的值。
void
setVersion(int v)
設(shè)置Cookie所遵從的協(xié)議版本。
讀取客戶(hù)端的Cookie
在Cookie發(fā)送到客戶(hù)端前,先要?jiǎng)?chuàng)建一個(gè)Cookie,然后用addCookie方法發(fā)送一個(gè)HTTP Header。JSP將調(diào)用request.getCookies()從客戶(hù)端讀入Cookie,getCookies()方法返回一個(gè)HTTP請(qǐng)求頭中的內(nèi)容對(duì)應(yīng)的Cookie對(duì)象數(shù)組。你只需要用循環(huán)訪問(wèn)該數(shù)組的各個(gè)元素,調(diào)用getName方法檢查各個(gè)Cookie的名字,直至找到目標(biāo)Cookie,然后對(duì)該Cookie調(diào)用getValue方法取得與指定名字關(guān)聯(lián)的值。
例如:
<%
 //從提交的HTML表單中獲取,用戶(hù)名
 String userName=request.getParameter("username"); //以"username", userName 值/對(duì) 創(chuàng)建一個(gè)Cookie
 Cookie theUsername=new Cookie("username",userName); response.addCookie(theUsername);
%>
..............
<%
 Cookie myCookie[]=request.getCookies();//創(chuàng)建一個(gè)Cookie對(duì)象數(shù)組 for(int n=0;n=cookie.length-1;i++);//設(shè)立一個(gè)循環(huán),來(lái)訪問(wèn)Cookie對(duì)象數(shù)組的每一個(gè)元素 Cookie newCookie= myCookie[n]; if(newCookie.getName().equals("username")); //判斷元素的值是否為username中的值
{%>
 你好,<%=newCookie.getValue()%>!//如果找到后,向他問(wèn)好
<%}
%>
設(shè)置Cookie的存在時(shí)間,及刪除Cookie
在JSP中,使用setMaxAge(int expiry)方法來(lái)設(shè)置Cookie的存在時(shí)間,參數(shù)expiry應(yīng)是一個(gè)整數(shù)。正值表示cookie將在這么多秒以后失效。注意這個(gè)值是cookie將要存在的最大時(shí)間,而不是cookie現(xiàn)在的存在時(shí)間。負(fù)值表示當(dāng)瀏覽器關(guān)閉時(shí),Cookie將會(huì)被刪除。零值則是要?jiǎng)h除該Cookie。如:
<%
 Cookie deleteNewCookie=new Cookie("newcookie",null);
 deleteNewCookie.setMaxAge(0); //刪除該Cookie
 deleteNewCookie.setPath("/");
 response.addCookie(deleteNewCookie);
%>  
保存寫(xiě)入Cookie
其實(shí)用JSP操作Cookie是非常簡(jiǎn)單的,我們來(lái)看下面一段JSP程序:
........(中間略)//保存寫(xiě)入Cookie
<%
String cookieName="Sender";
Cookie cookie=new Cookie(cookieName, "Test_Content");
cookie.setMaxAge(10);   //存活期為10秒
response.addCookie(cookie);
%>
........(其他內(nèi)容)
這樣我們就設(shè)置了一個(gè)Cookie,很簡(jiǎn)單吧?
我們來(lái)仔細(xì)研究一下這段代碼:
Cookie cookie=new Cookie(cookieName, "Test_Content");
這一行建立了一個(gè)Cookie對(duì)象,初始化有兩個(gè)參數(shù),第一個(gè)參數(shù)cookieName定義了Cookie的名字,后一個(gè)參數(shù),也是一個(gè)字符串,定義了Cookie的內(nèi)容。也就是我們希望網(wǎng)頁(yè)在用戶(hù)的機(jī)器上標(biāo)識(shí)的文件內(nèi)容。
接下來(lái)一行:cookie.setMaxAge(10),調(diào)用了Cookie中的setMaxAge方法,設(shè)定Cookie在用戶(hù)機(jī)器硬盤(pán)上的存活期為10秒。一個(gè)Cookie在用戶(hù)的硬盤(pán)里面存在的時(shí)間并不是無(wú)限期的,在建立Cookie對(duì)象的時(shí)候,我們必須制定Cookie的存活期,超過(guò)了這個(gè)存活期后,Cookie文件就不再起作用,會(huì)被用戶(hù)的瀏覽器自行刪除。如果我們希望用戶(hù)在下次訪問(wèn)這個(gè)頁(yè)面的時(shí)候,Cookie文件仍然有效而且可以被網(wǎng)頁(yè)讀出來(lái)的話,我們可以將Cookie的存活期設(shè)得稍微長(zhǎng)一些。比如cookie.setMaxAge(365*24*60*60)可以讓Cookie文件在一年內(nèi)有效。
讀取出Cookie
Cookie文件創(chuàng)建好后,自然還需要我們把它讀出來(lái),否則我們不是白費(fèi)力氣嗎?接下來(lái)我們看看如何讀出在用戶(hù)硬盤(pán)上的Cookie。
........(中間略)Name value<%
Cookie cookies[]=request.getCookies(); //讀出用戶(hù)硬盤(pán)上的Cookie,
并將所有的Cookie放到一個(gè)cookie對(duì)象數(shù)組里面
Cookie sCookie=null;
String svalue=null;
String sname=null; for(int i=0;i<cookies.length-1;i++{    //用一個(gè)循環(huán)語(yǔ)句遍歷剛才建立的Cookie對(duì)象數(shù)組
sCookie=cookies;   //取出數(shù)組中的一個(gè)Cookie對(duì)象sname=sCookie.getName(); //取得這個(gè)Cookie的名字
svalue=sCookie.getValue(); //取得這個(gè)Cookie的內(nèi)容
%><%
}
%>
name  value
<%=name%> <%=svalue%>
........(其他內(nèi)容)
這一小段JSP文件可以讀出用戶(hù)硬盤(pán)上的所有有效的Cookie,也就是仍然在存活期內(nèi)的Cookie文件。并用表格的形式列出每個(gè)Cookie的名字和內(nèi)容。
我們來(lái)逐行分析一下這段代碼:
Cookie cookies[]=request.getCookies()
我們用request.getCookies()讀出用戶(hù)硬盤(pán)上的Cookie,并將所有的Cookie放到一個(gè)cookie對(duì)象數(shù)組里面。
接下來(lái)我們用一個(gè)循環(huán)語(yǔ)句遍歷剛才建立的Cookie對(duì)象數(shù)組,我們用sCookie=cookies取出數(shù)組中的一個(gè)Cookie對(duì)象,然后我們用sCookie.getValue()和sCookie.getName()兩個(gè)方法來(lái)取得這個(gè)Cookie的名字和內(nèi)容。
通過(guò)將取出來(lái)的Cookie的名字和內(nèi)容放在字符串變量中,我們就能對(duì)其進(jìn)行各種操作了。在上面的例子里,可通過(guò)循環(huán)語(yǔ)句的遍歷,將所有Cookie放在一張表格中進(jìn)行顯示。
需要注意的一些問(wèn)題
通過(guò)上面兩個(gè)簡(jiǎn)單的例子,可以看到,用JSP進(jìn)行Cookie的操作,是非常簡(jiǎn)單的。不過(guò)我們?cè)趯?shí)際操作中還要注意一些問(wèn)題:
1. Cookie的兼容性問(wèn)題
Cookie的格式有2個(gè)不同的版本,第一個(gè)版本,我們稱(chēng)為Cookie Version 0,是最初由Netscape公司制定的,也被幾乎所有的瀏覽器支持。而較新的版本,Cookie Version 1,則是根據(jù)RFC 2109文檔制定的。為了確保兼容性,JAVA規(guī)定,前面所提到的涉及Cookie的操作都是針對(duì)舊版本的Cookie進(jìn)行的。而新版本的Cookie目前還不被Javax.servlet.http.Cookie包所支持。
2. Cookie的內(nèi)容
同樣的Cookie的內(nèi)容的字符限制針對(duì)不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格、方括號(hào)、圓括號(hào)、等于號(hào)(=)、逗號(hào)、雙引號(hào)、斜杠、問(wèn)號(hào)、@符號(hào)、冒號(hào)、分號(hào)都不能作為Cookie的內(nèi)容。這也就是為什么我們?cè)诶又性O(shè)定Cookie的內(nèi)容為"Test_Content"的原因。
雖然在Cookie Version 1規(guī)定中放寬了限制,可以使用這些字符,但是考慮到新版本的Cookie規(guī)范目前仍然沒(méi)有為所有的瀏覽器所支持,因而為保險(xiǎn)起見(jiàn),我們應(yīng)該在Cookie的內(nèi)容中盡量避免使用這些字符。


本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/104854/showart_2078655.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP