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)。