cookie的問題
?<%
????????????? String list ="";
????????????? //從客戶端獲得Cookies集合
????????????? Cookie[] cookies = request.getCookies();
????????????? //遍歷這個Cookies集合
????????????? if(cookies!=null&&cookies.length>0)
????????????? {
?? ?????????????? for(Cookie c:cookies)
?? ?????????????? {
?? ?????????????????? if(c.getName().equals("ListViewCookie"))
?? ?????????????????? {
?? ????????????????????? list = c.getValue();
?? ?????????????????? }
?? ?????????????? }
?? ?????????? }
???????????? ?
????????????? list+=request.getParameter("id")+",";
????????????? //如果瀏覽記錄超過1000條,清零.
????????????? String[] arr = list.split(",");
????????????? if(arr!=null&&arr.length>0)
????????????? {
????????????????? if(arr.length>=1000)
????????????????? {
????????????????????? list="";
????????????????? }
????????????? }
????????????? Cookie cookie = new Cookie("ListViewCookie",list);
????????????? response.addCookie(cookie);
???????? ?
????????? %>
明明listviewCookie是后面才創建的,但在前面就引用,這樣可以么,代碼執行順序不是從上到下?還是因為先編譯完了,對象都加載完了,所以調用沒關系?不是很清楚。
2016-11-08
??? 當你用瀏覽器請求某個服務器時,瀏覽器會將該服務器存放在本地的cookie(可能有,也可能沒有,這是你判斷cookies是否為null以及長度是否大于0的原因)放入請求中,而listviewCookie是一段字符串,是其中一個cookie名稱。如果你之前存放在本地的cookie中有叫這個名稱的cookie,那么就能取到這個cookie(就是你遍歷cookie中equals判斷的原因)。所以listviewCookie并不是后面才創建的,而是來自你瀏覽存放在本地的cookie中的,可能存在也可能不存在,如果存在的話,服務器收到瀏覽器的請求時,就會在這次請求對應的request對象中創建此cookie(名稱為listviewCookie)。
??? 你后面的代碼:Cookie cookie = new Cookie("ListViewCookie",list);是創建了一個新的cookie對象,這個cookie名稱為ListViewCookie,值為list。將這個cookie對象放入response對象后,瀏覽器獲得服務器的響應后,將從response中獲取這個cookie并將它存放在本地(如果之前有來自該服務器并且也叫這個名稱的cookie則會覆蓋之前的)。當你再次訪問這個服務器的時候,就會將該服務器存放在本地的cookie放入請求中發送至服務器(這里就可以接到上一段開始了)。
??? 表達無力,不好意思。
2017-10-02
簡單點說 就是當你第一次點擊商品的時候還沒有一個鍵值名為listviewcookie的cookie對象(這也是設計的核心所在,因為當你在創建一個listviewcookie的cookie對象時它會覆蓋你之前的名為listviewcookie的cookie對象的值從而實現字符串追加的目的并將他保存在cookie中),所以會跳過判斷,執行list追加字符串后的語句