jsp開發網站使用cookie的一點經驗

來源:互聯網
上載者:User
cookie|js 在開發網站應用程式程式的過程中,使用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)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.