明天的明天的明天

          用鍵盤(pán)改變生活

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            17 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks
          這個(gè)問(wèn)題今天也搞得我很郁悶,寫(xiě)入cookie時(shí)因?yàn)槲覍?xiě)入時(shí)是在下級(jí)路徑寫(xiě)入的,讀取是要在上級(jí)路徑讀取,可是來(lái)來(lái)回回就是不行,死活在上級(jí)路徑讀取不了,在網(wǎng)上搜了很多文章,最后終于解決了,最后轉(zhuǎn)前輩寫(xiě)的一篇關(guān)于cookie的文章。
          /************************************************************/
          一、設(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的信息;一、設(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的信息;
          posted on 2007-09-17 12:37 Endless 閱讀(1428) 評(píng)論(1)  編輯  收藏

          Feedback

          # re: 關(guān)于jsp cookie的上級(jí)路徑問(wèn)題 2011-01-20 23:00 wq
          主樓的,你是如何搞定的?  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 连城县| 绥化市| 苏尼特左旗| 富顺县| 宁德市| 桐梓县| 泾源县| 焉耆| 桐庐县| 西和县| 龙川县| 百色市| 石首市| 确山县| 浦城县| 瓦房店市| 呼和浩特市| 天祝| 拉孜县| 通河县| 平南县| 菏泽市| 亚东县| 乌拉特前旗| 荥经县| 白银市| 南安市| 壤塘县| 彝良县| 阳高县| 黄浦区| 荆州市| 彭山县| 铜川市| 延川县| 临澧县| 松阳县| 阜平县| 福海县| 嘉禾县| 友谊县|