詳細(xì)了解JSP特點之Cookie
詳細(xì)了解JSP特點之Cookie
大家都傳說Cookie會造成嚴(yán)重的安全威脅什么的,其實不是這么回事情.服務(wù)器讀取Cookie的時候,只能夠讀取到這個服務(wù)器相關(guān)的信息.而且,瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個,而且,每個Cookie的大小現(xiàn)在在4K,根本不會占用多少空間.并且,Cookie是有時效性質(zhì)的.例如,設(shè)置了Cookie的存活時間為1分鐘,則一分鐘后這個Cookie就會被瀏覽器刪除
1.服務(wù)器可以向客戶端寫內(nèi)容
2.只能是文本內(nèi)容,且大小為4K(安全)
3.客戶端可以阻止服務(wù)器寫入
4.只能拿自己webapp寫入的東西(安全)
5.Cookie分為兩種
a.屬于窗口/子窗口(放在內(nèi)存中),窗口一關(guān)閉,即Cookie內(nèi)容失效
b.寫在本地磁盤的文本(有生命周期)
6.一個servlet/jsp設(shè)置的cookie能夠被同一個路徑下面或者子路徑下面的servlet/jsp讀到(路徑=url)
(路徑!=真實文件路徑)
也就是說,子路徑下生成的cookie,父路徑不能讀取
父路徑生成的cookie,子路徑能讀取
JSP中對Cookie的操作:類型方法名方法解釋
StringgetComment()返回cookie中注釋,如果沒有注釋的話將返回空值.
StringgetDomain()返回cookie中Cookie適用的域名.使用getDomain()方法可以指示瀏覽器把Cookie返回給同一域內(nèi)的其他服務(wù)器,而通常Cookie只返回給與發(fā)送它的服務(wù)器名字完全相同的服務(wù)器。注意域名必須以點開始
intgetMaxAge()返回Cookie過期之前的最大時間,以秒計算。
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(Stringpurpose)設(shè)置cookie中注釋
voidsetDomain(Stringpattern)設(shè)置cookie中Cookie適用的域名
voidsetMaxAge(intexpiry)以秒計算,設(shè)置Cookie過期時間。
voidsetPath(Stringuri)指定Cookie適用的路徑。
voidsetSecure(booleanflag)指出瀏覽器使用的安全協(xié)議,例如HTTPS或SSL。
voidsetValue(StringnewValue)cookie創(chuàng)建后設(shè)置一個新的值。
voidsetVersion(intv)設(shè)置Cookie所遵從的協(xié)議版本
一個簡單的例子
1.寫入Cookie---writecookie.jsp
- <%@pagecontentType="text/html;charset=ISO8859_1"%>
- <%
- Cookie_cookie=newCookie("user_delfancom","delfan");
- _cookie.setMaxAge(30*60);//設(shè)置Cookie的存活時間為30分鐘
- response.addCookie(_cookie);//寫入客戶端硬盤
- out.print("寫Cookie完成");
- %>
2.讀取Cookie.jsp---readcookie.jsp
- <%
- Cookiecookies[]=request.getCookies();//將適用目錄下所有Cookie讀入并存入cookies數(shù)組中
- CookiesCookie=null;
- Stringsname=null;
- Stringname=null;
- if(cookies==null)//如果沒有任何cookie
- out.print("noneanycookie");
- else
- {
- out.print(cookies.length+"
- ");
- for(inti=0;i{
- sCookie=cookies[i];
- sname=sCookie.getName();
- name=sCookie.getValue();
- out.println(sname+"->"+name+"
- ");
- }
- }
- %>
需要注意的兩個JSP特點的問題:
1.Cookie有個適用路徑的問題,就是說如果writecookie.jsp和readcookie.jsp要放在同意目錄下,如果不在同一目錄下,則寫的時候需要設(shè)置路徑,為readcookie.jsp所在的路徑.
2.讀入Cookie數(shù)組的時候需要判斷是否為空(null),網(wǎng)上很多代碼都沒有寫出這一點.
【編輯推薦】