當前位置:開發者網絡 >> 技術教程 >> JSP教程 >> Java技巧及代碼 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
jsp開發網站使用cookie的一點經驗
作者:未知
日期:2005-04-30
人氣:
投稿:(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
在開發網站應用程序的過程中,使用cookie記錄用戶的一些信息是比較常用的一種方法,而cookie的使用也非常簡單。如果我們在jsp程序中希望得到cookie的值,只需要使用HttpRequest.getCookies()即可得到所有cookie的值,而把值寫入客戶端的cookie文件也非常容易,是需要創建一個cookie,然後調用HttpReponse.addCookie(Cookiec)即可。但是我們在使用過程中往往會忽略一個問題,就是如果在一個頁面中多次寫一個cookie,那麼結果如何呢?我們現在看一下下面兩個頁面的代碼,test.jsp代碼如下:<%      Cookie c = new Cookie("test_cookie_name","test_cookie_value");      response.addCookie(c);      Cookie c1 = new Cookie("test_cookie_name","test_cookie_value_new");      response.addCookie(c1);%><a href="test1.jsp">show cookie value</a>test1.jsp代碼如下:<%      Cookie[] cs = request.getCookies();      for(int i=0;i<cs.length;i++){              out.println(cs[i].getName()+"  "+cs[i].getValue()+"<br>");      }%>我們打開test.jsp,然後點擊鏈接,進入test1.jsp,我們會發現,頁面裡的內容如下:test_cookie_name  test_cookie_valueJSESSIONIDQiv2X8CVzyA6T0hNzrVNHFJUepeAiG8magiz2bREKiUP1Pyiiebq!-1263017589!-1062731417!80!443我們可以看到test_cookie_name的值是test_cookie_value,這說明我們第二次調用response.addCookie()沒有起到任何作用。為了更加確定這一說法我把test.jsp的代碼做了一定的改動:<%for(int i=0;i<8;i++){      Cookie c = new Cookie("test_cookie_name","test_cookie_value"+i);      response.addCookie(c);    }%><a href="test1.jsp">test</a>通過測試可知結果還是一樣,已有第一次賦的值真正的被寫入了cookie。有人也許會說,我們可以通過request.getCookies()得到所有cookie,然後找出這個要寫的cookie,然後改變值,測試代碼如下:test.jsp代碼:<%      Cookie c = new Cookie("test_cookie_name","test_cookie_value");      response.addCookie(c);      Cookie c1 = new Cookie("test_cookie_name","test_cookie_value_new");      response.addCookie(c1);      Cookie c2 = new Cookie("test_cookie_name1","test_cookie_value1");      response.addCookie(c2);      Cookie[] cs = request.getCookies();      for(int i=0;i<cs.length;i++){              if(cs[i].getName().equals("test_cookie_name1")){                      cs[i].setValue("test_cookie_value1_new");                      response.addCookie(c2);                      break;              }      }%><a href="test1.jsp">show cookie value</a>測試結果還是證明這種做法不能解決我們遇到的問題,test_cookie_name1的值仍是test_cookie_value1,而不是test_cookie_value1_new,其實我們仔細想一下就可以知道,這個解決方案是行不通的。因為我們知道,對於一個頁面中的request和response,是一次http請求產生的,request是http請求中的所有參數,因此包含了發出這次http請求時cookie的值,而response是對於這次http請求webapplication產生的反應,所以它可以寫cookie的值,這樣看來,request得到的cookie的值,和response要寫的cookie的值可以說是完全不同的,簡單地說request得到的cookie的值是在這次http請求之前的cookie的值,而response要寫得值是這次http請求之後的cookie的值。所以上面的解決方案是無法行得通的。而我現在還沒有發現有什麼好的解決方案能夠是的cookie記錄下我們最後一次寫入的值,因此對於這個問題我們只能在代碼中做到,對於每個http請求,對於每個cookie的值,只寫一次,從而保證cookie的正確性。版權所有:idilent 網站轉載請註明作者 其他轉載方式請與作者聯繫(idilent@yahoo.com.cn)。
相關文章: