熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

詳細介紹Jsp中的Cookies

2013-11-23 18:46:49  來源: Java核心技術 

  在開發網站應用程序的過程中使用cookie記錄用戶的一些信息是比較常用的一種方法而cookie的使用也非常簡單

  Cookie是通過HttpServletResponse的addCookie方法加入到SetCookie應答頭中的

  例如

  Cookie userCookie = new Cookie(user admin

  responseaddCookie(userCookie)

  和設置有關系的還有以下兩個重要方法

  setMaxAge

  設置Cookie過期之前的時間以秒計如果不設置該值則Cookie只在當前會話內有效而且這些Cookie不會保存到磁盤上

  注意刪除cookie就是通過該方法實現的將要刪除的cookie的過期之前的時間指定為就可以達到刪除該cookie的目的

  setPath

  設置Cookie適用的路徑如果不指定路徑Cookie將返回給當前頁面(jsp(SUN企業級應用的首選)頁面或者Servlet的映射)所在目錄及其子目錄下的所有頁面

  注意

  A所有的cookie都是有路徑的

  B該方法設置的路徑為客戶端路徑/代表服務器根目錄而不是WEB應用根目錄

  C該方法設置路徑時/myWeb//myWeb是不同的要特別注意前者可以關聯到服務器的myWeb目錄下而後者則不可以

  D該方法設置路徑時沒有相對目錄可言即不論在哪個目錄下設置setPath(/myWeb/該cookie都將關聯到服務器的myWeb目錄下(setPath(/myWeb)則不可以)而不是當前目錄的myWeb的子目錄下同樣設置setPath(myWeb/)和setPath(myWeb)也不能關聯到當前目錄的myWeb的子目錄下

  這裡有個奇怪的例子就是在一個web應用下設置的cookie可以在另一個web應用下獲得(兩個web應用在同一個服務器下)

  目錄結構在服務器根目錄上有web和web兩個目錄在web下有setcookiejsp(SUN企業級應用的首選)和getcookiejsp(SUN企業級應用的首選)在web下有getcookiejsp(SUN企業級應用的首選)

  web下的setcookiejsp(SUN企業級應用的首選)

  <%

  Cookie userCookie = new Cookie(user admin

  userCookiesetMaxAge(**

  userCookiesetPath(/web/

  responseaddCookie(userCookie)

  %> web下的getcookiejsp(SUN企業級應用的首選)

  <%

  Cookie[] cookie = requestgetCookies()

  String user = new String()

  if ( cookie != null )

  {  for (int i = ; i < cookielength; i++)

  {  Cookie myCookie = cookie[i];

  if (myCookiegetName()equals(user))

  {  user = myCookiegetValue()

  }

  }

  }

  outprintln(user = + user)

  %>  web下的getcookiejsp(SUN企業級應用的首選)

  <%  Cookie[] cookie = requestgetCookies()

  String user = new String()

  if ( cookie != null )

  {  for (int i = ; i < cookielength; i++)

  {  Cookie myCookie = cookie[i];

  if (myCookiegetName()equals(user))

  {  user = myCookiegetValue()

  }

  }

  }

  outprintln(user = + user)

  %>
[nextpage]
    先訪問web下的setcookiejsp(SUN企業級應用的首選)然後分別訪問web和web下面的getcookiejsp(SUN企業級應用的首選)文件你會發現奇怪的現象web下的getcookiejsp(SUN企業級應用的首選)中user為空而web下的getcookiejsp(SUN企業級應用的首選)中user卻有值這就實現了從一個web應用下設置的cookie在另一個web應用下獲得

  大多數人刪除cookie不成功都是因為目錄原因一個典型的原因是在某一個目錄中設置了cookie(沒有調用setPath方法)卻在另一個目錄中刪除該cookie(其實是調用setMaxAge方法)

  跨域共享cookie的方法設置

  cookiesetDomain(

  A機所在的域A有應用cas

  B機所在的域B有應用webapp_b

  )在cas下面設置cookie的時候增加cookiesetDomain(這樣在webapp_b下面就可以取到cookie

  )這個參數必須以開始

  )輸入url訪問webapp_b的時候必須輸入域名才能解析比如說在A機器輸入_b可以獲取cas在客戶端設置的cookie而B機器訪問本機的應用輸入//localhost:/webapp_b則不可以獲得cookie

  )設置了cookiesetDomain(還可以在默認的下面共享

  讀取

  從客戶端讀取Cookie時調用的是HttpServletRequest的getCookies方法該方法返回一個與HTTP請求頭中的內容對應的Cookie對象數組得到這個數組之後一般是用循環訪問其中的各個元素調用getName檢查各個Cookie的名字直至找到目標Cookie然後對這個目標Cookie調用getValue根據獲得的結果進行其他處理

  注意若jsp(SUN企業級應用的首選)和Servlet所在目錄(Servlet為其映射目錄)的父目錄中有同名cookie則requestgetCookie()方法得到的Cookie數組中保存的是其父目錄中的cookie的信息

  說明

  我們知道對於一個頁面中的request和response是一次http請求產生的request是http請求中的所有參數因此包含了發出這次http請求時cookie的值而response是對於這次http請求webapplication產生的反應所以它可以寫cookie的值這樣看來request得到的cookie的值和response要寫的cookie的值可以說是完全不同的

  簡單地說request得到的cookie的值是在這次http請求之前的cookie的值而response要寫得值是這次http請求之後的cookie的值所以在同一個request和response中如果response中增加了新的cookierequest中並不能得到


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25721.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.