weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評(píng)論 - 101, 引用 - 0
          數(shù)據(jù)加載中……

          關(guān)于cookie的小總結(jié)

          前兩天看見(jiàn)有兄弟問(wèn)cookie為什么刪除不了,所以寫(xiě)了給小總結(jié),希望對(duì)用cookie的各位兄弟有幫助
          對(duì)于cookie,最主要的當(dāng)然是讀取和設(shè)置了,下面分兩方面說(shuō)明.
          一、設(shè)置
          Cookie是通過(guò)HttpServletResponse的addCookie方法加入到Set-Cookie應(yīng)答頭中的
          例如:
          Cookie userCookie = new Cookie("user", "admin");
          response.addCookie(userCookie);
          和設(shè)置有關(guān)系的還有以下兩個(gè)重要方法
          1.setMaxAge
          設(shè)置Cookie過(guò)期之前的時(shí)間,以秒計(jì)。如果不設(shè)置該值,則Cookie只在當(dāng)前會(huì)話內(nèi)有效,而且這些Cookie不會(huì)保存到磁盤(pán)上。
          注意:刪除cookie就是通過(guò)該方法實(shí)現(xiàn)的。將要?jiǎng)h除的cookie的過(guò)期之前的時(shí)間指定為0就可以達(dá)到刪除該cookie的目的。
          2.setPath
          設(shè)置Cookie適用的路徑。如果不指定路徑,Cookie將返回給當(dāng)前頁(yè)面(JSP頁(yè)面或者Servlet的映射)所在目錄及其子目錄下的所有頁(yè)面。
          注意:
          A:所有的cookie都是有路徑的
          B:該方法設(shè)置的路徑為客戶端路徑,即“/”代表服務(wù)器根目錄,而不是WEB應(yīng)用根目錄
          C:該方法設(shè)置路徑時(shí),“/myWeb/”與“/myWeb”是不同的,要特別注意;前者可以關(guān)聯(lián)到服務(wù)器的myWeb目錄下,而或者則不可以。
          D:該方法設(shè)置路徑時(shí),沒(méi)有相對(duì)目錄可言,即不論在哪個(gè)目錄下設(shè)置setPath(“/myWeb/”),該cookie都將關(guān)聯(lián)到服務(wù)器的myWeb目錄下(setPath(“/myWeb”)則不可以),而不是當(dāng)前目錄的myWeb的子目錄下;同樣,設(shè)置setPath(“myWeb/”)和setPath(“myWeb”)也不能關(guān)聯(lián)到當(dāng)前目錄的myWeb的子目錄下
          這里有個(gè)奇怪的例子,就是在一個(gè)web應(yīng)用下設(shè)置的cookie可以在另一個(gè)web應(yīng)用下獲得(兩個(gè)web應(yīng)用在同一個(gè)服務(wù)器下)
          目錄結(jié)構(gòu):在服務(wù)器根目錄上有web1和web2兩個(gè)目錄,在web1下有setcookie.jsp和getcookie.jsp、在web2下有g(shù)etcookie.jsp
          web1下的setcookie.jsp
          <%
          Cookie userCookie = new Cookie("user", "admin");
          userCookie.setMaxAge(24*60*60);
          userCookie.setPath("/web2/");
          response.addCookie(userCookie);
          %>
          web1下的getcookie.jsp
          <%
          Cookie[] cookie = request.getCookies();
          String user = new String();
          if ( cookie != null ) {
          for (int i = 0; i < cookie.length; i++) {
          Cookie myCookie = cookie[i];
          if (myCookie.getName().equals("user")) {
          user = myCookie.getValue();
          }
          }
          }
          out.println("user = " + user);
          %>
          web2下的getcookie.jsp
          <%
          Cookie[] cookie = request.getCookies();
          String user = new String();
          if ( cookie != null ) {
          for (int i = 0; i < cookie.length; i++) {
          Cookie myCookie = cookie[i];
          if (myCookie.getName().equals("user")) {
          user = myCookie.getValue();
          }
          }
          }
          out.println("user = " + user);
          %>
          先訪問(wèn)web1下的setcookie.jsp,然后分別訪問(wèn)web1和web2下面的getcookie.jsp文件,你會(huì)發(fā)現(xiàn)奇怪的現(xiàn)象,web1下的getcookie.jsp中user為空而web2下的getcookie.jsp中user卻有值,這就實(shí)現(xiàn)了從一個(gè)web應(yīng)用下設(shè)置的cookie在另一個(gè)web應(yīng)用下獲得。
          大多數(shù)人刪除cookie不成功都是因?yàn)槟夸浽颉R粋€(gè)典型的原因是在某一個(gè)目錄中設(shè)置了cookie(沒(méi)有調(diào)用setPath方法)卻在另一個(gè)目錄中刪除該cookie(其實(shí)是調(diào)用setMaxAge方法)

          二、讀取
          從客戶端讀取Cookie時(shí)調(diào)用的是HttpServletRequest的getCookies方法。該方法返回一個(gè)與HTTP請(qǐng)求頭中的內(nèi)容對(duì)應(yīng)的Cookie對(duì)象數(shù)組。得到這個(gè)數(shù)組之后,一般是用循環(huán)訪問(wèn)其中的各個(gè)元素,調(diào)用getName檢查各個(gè)Cookie的名字,直至找到目標(biāo)Cookie。然后對(duì)這個(gè)目標(biāo)Cookie調(diào)用getValue,根據(jù)獲得的結(jié)果進(jìn)行其他處理。
          注意:若JSP和Servlet所在目錄(Servlet為其映射目錄)的父目錄中有同名cookie,則request.getCookie()方法得到的Cookie數(shù)組中保存的是其父目錄中的cookie的信息;

          from: http://www.cndiy8.com/data/web5409/20050311/20050311__3812885.html

          posted on 2006-12-05 19:38 weidagang2046 閱讀(456) 評(píng)論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 龙门县| 宁南县| 阜新市| 洛隆县| 濮阳县| 建平县| 合江县| 武强县| 虹口区| 保康县| 忻城县| 阿坝县| 徐水县| 车险| 若羌县| 孟连| 甘谷县| 台湾省| 临高县| 陈巴尔虎旗| 靖安县| 辽宁省| 乡宁县| 康马县| 修水县| 车致| 怀化市| 淮滨县| 屯门区| 洛阳市| 新河县| 驻马店市| 元氏县| 高邮市| 清镇市| 蒲城县| 冀州市| 张家口市| 宣城市| 麻城市| 正阳县|