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