明天的明天的明天

          用鍵盤改變生活

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            17 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks
          這個問題今天也搞得我很郁悶,寫入cookie時因為我寫入時是在下級路徑寫入的,讀取是要在上級路徑讀取,可是來來回回就是不行,死活在上級路徑讀取不了,在網上搜了很多文章,最后終于解決了,最后轉前輩寫的一篇關于cookie的文章。
          /************************************************************/
          一、設置  
            Cookie是通過HttpServletResponse的addCookie方法加入到Set-Cookie應答頭中的  
            例如:  
                    Cookie   userCookie   =   new   Cookie("user",   "admin");    
                    response.addCookie(userCookie);  
            和設置有關系的還有以下兩個重要方法  
            1.setMaxAge  
            設置Cookie過期之前的時間,以秒計。如果不設置該值,則Cookie只在當前會話內有效,而且這些Cookie不會保存到磁盤上。  
            注意:刪除cookie就是通過該方法實現的。將要刪除的cookie的過期之前的時間指定為0就可以達到刪除該cookie的目的。  
            2.setPath  
            設置Cookie適用的路徑。如果不指定路徑,Cookie將返回給當前頁面(JSP頁面或者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應用在同一個服務器下)  
            目錄結構:在服務器根目錄上有web1和web2兩個目錄,在web1下有setcookie.jsp和getcookie.jsp、在web2下有getcookie.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);  
            %>  
            先訪問web1下的setcookie.jsp,然后分別訪問web1和web2下面的getcookie.jsp文件,你會發現奇怪的現象,web1下的getcookie.jsp中user為空而web2下的getcookie.jsp中user卻有值,這就實現了從一個web應用下設置的cookie在另一個web應用下獲得。  
            大多數人刪除cookie不成功都是因為目錄原因。一個典型的原因是在某一個目錄中設置了cookie(沒有調用setPath方法)卻在另一個目錄中刪除該cookie(其實是調用setMaxAge方法)  
             
            二、讀取  
            從客戶端讀取Cookie時調用的是HttpServletRequest的getCookies方法。該方法返回一個與HTTP請求頭中的內容對應的Cookie對象數組。得到這個數組之后,一般是用循環訪問其中的各個元素,調用getName檢查各個Cookie的名字,直至找到目標Cookie。然后對這個目標Cookie調用getValue,根據獲得的結果進行其他處理。  
            注意:若JSP和Servlet所在目錄(Servlet為其映射目錄)的父目錄中有同名cookie,則request.getCookie()方法得到的Cookie數組中保存的是其父目錄中的cookie的信息;一、設置  
            Cookie是通過HttpServletResponse的addCookie方法加入到Set-Cookie應答頭中的  
            例如:  
                    Cookie   userCookie   =   new   Cookie("user",   "admin");    
                    response.addCookie(userCookie);  
            和設置有關系的還有以下兩個重要方法  
            1.setMaxAge  
            設置Cookie過期之前的時間,以秒計。如果不設置該值,則Cookie只在當前會話內有效,而且這些Cookie不會保存到磁盤上。  
            注意:刪除cookie就是通過該方法實現的。將要刪除的cookie的過期之前的時間指定為0就可以達到刪除該cookie的目的。  
            2.setPath  
            設置Cookie適用的路徑。如果不指定路徑,Cookie將返回給當前頁面(JSP頁面或者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應用在同一個服務器下)  
            目錄結構:在服務器根目錄上有web1和web2兩個目錄,在web1下有setcookie.jsp和getcookie.jsp、在web2下有getcookie.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);  
            %>  
            先訪問web1下的setcookie.jsp,然后分別訪問web1和web2下面的getcookie.jsp文件,你會發現奇怪的現象,web1下的getcookie.jsp中user為空而web2下的getcookie.jsp中user卻有值,這就實現了從一個web應用下設置的cookie在另一個web應用下獲得。  
            大多數人刪除cookie不成功都是因為目錄原因。一個典型的原因是在某一個目錄中設置了cookie(沒有調用setPath方法)卻在另一個目錄中刪除該cookie(其實是調用setMaxAge方法)  
             
            二、讀取  
            從客戶端讀取Cookie時調用的是HttpServletRequest的getCookies方法。該方法返回一個與HTTP請求頭中的內容對應的Cookie對象數組。得到這個數組之后,一般是用循環訪問其中的各個元素,調用getName檢查各個Cookie的名字,直至找到目標Cookie。然后對這個目標Cookie調用getValue,根據獲得的結果進行其他處理。  
            注意:若JSP和Servlet所在目錄(Servlet為其映射目錄)的父目錄中有同名cookie,則request.getCookie()方法得到的Cookie數組中保存的是其父目錄中的cookie的信息;
          posted on 2007-09-17 12:37 Endless 閱讀(1428) 評論(1)  編輯  收藏

          Feedback

          # re: 關于jsp cookie的上級路徑問題 2011-01-20 23:00 wq
          主樓的,你是如何搞定的?  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 临朐县| 台北市| 历史| 武安市| 璧山县| 大姚县| 涡阳县| 莲花县| 凤凰县| 黄龙县| 鲁甸县| 清镇市| 花垣县| 武义县| 司法| 三门峡市| 荥阳市| 塘沽区| 巴南区| 临江市| 天等县| 都安| 尼玛县| 德惠市| 隆昌县| 盘锦市| 滁州市| 中山市| 安龙县| 横山县| 玛纳斯县| 长春市| 东宁县| 朝阳市| 当涂县| 乐亭县| 称多县| 大关县| 饶平县| 青田县| 商洛市|