請教下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);
if(cookies!=null&&cookies.length>0) ??????????????{ ??????????????for(Cookie?c:cookies) ??????????????{ ??????????????????if(c.getName().equals("ListViewCookie")) ??????????????????{ ?????????????????????list?=?c.getValue(); ??????????????????} ??????????????} ??????????} ?????????????? ??????????????list+=request.getParameter("id")+",";
這段代碼不太懂,c.getName().equals("ListViewCookie")中的“ListViewCookie”在第一次開始遍歷的時候是不存在的對嗎?因為在最后才創(chuàng)建了
?Cookie?cookie?=?new?Cookie("ListViewCookie",list);
這個cookie對象。如果我第一次點擊了id為1的商品
也就是說第一次遍歷的時候 list=“1,”。
等到如果我第二次我點擊了id為2的時候
list=“1,沃特籃球鞋,2”;
是醬紫嗎?
2016-11-23
我建議你實在理不清就這樣理解。?
假設(shè)代碼是這樣執(zhí)行的:
--------------------------------第一次執(zhí)行-------------------------------------------------------
String?list?="";
list+=request.getParameter("id")+","; ? //這里相當(dāng)于就是獲取商品的id值并添加到字符串中
??????????????//如果瀏覽記錄超過1000條,清零.
??????????????String[]?arr?=?list.split(","); ? ??
??????????????if(arr!=null&&arr.length>0)
??????????????{
??????????????????if(arr.length>=1000)?
??????????????????{
??????????????????????list="";
??????????????????}
??????????????}
?//設(shè)置一個cookie,名為ListView,值為list?(而這里的list就是上面的request.getParameter("id")即商品的id)
??????????????Cookie?cookie?=?new?Cookie("ListViewCookie",list);
??????????????response.addCookie(cookie);
--------------------------------第二次執(zhí)行-------------------------------------------------------
?//從客戶端獲得Cookies集合
??????????????Cookie[]?cookies?=?request.getCookies();
??????????????//遍歷這個Cookies集合
??????????????if(cookies!=null&&cookies.length>0)
??????????????{
??????????????????for(Cookie?c:cookies)
??????????????????{
????????????????//匹配是否有名為ListViewCookie的cookie
? ? ? ? ? ? ? ? if(c.getName().equals("ListViewCookie"))?
??????????????????????{
?????????????????????????list?=?c.getValue(); ?//匹配到后獲取cookie的值,覆蓋原來的字符串。
??????????????????????}
??????????????????}
??????????????}
所以有可能你最后獲得的list就是“2,5,6,10,12,”只是商品的id而已,沒有商品的名稱...只用id即可確定某條具體信息。
2016-11-23
我始終覺得你是以為代碼始終就是從上到下執(zhí)行,原本這是代碼的執(zhí)行方式?jīng)]錯,但是第一段代碼并沒有滿足條件,所以會直接執(zhí)行第2段,而下一次執(zhí)行才會執(zhí)行第1段,然后第2段
2016-11-23
cookie本身是有生命周期的,即有個過期時間。
下面這段代碼的用途是來判斷是否有匹配的cookie,如果有,執(zhí)行這行代碼? ?list?=?c.getValue();
?Cookie[]?cookies?=?request.getCookies();
??????????????//遍歷這個Cookies集合
??????????????if(cookies!=null&&cookies.length>0)
??????????????{
??????????????????for(Cookie?c:cookies)
??????????????????{
??????????????????????if(c.getName().equals("ListViewCookie"))
??????????????????????{
?????????????????????????list?=?c.getValue();
??????????????????????}
??????????????????}
??????????????}
如果沒有,則上面這段代碼將不被執(zhí)行,直接執(zhí)行下面這段代碼
?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);
實際上項目第一次被執(zhí)行的時候是先執(zhí)行的第2段代碼,然后第二次才是執(zhí)行的第1段代碼
---------------------------------------------------------------------------------------------------
至于cookie里面存的值:
舉個例子,當(dāng)我點擊的id為1的商品,?則list=“1,”;
????????????????????????點擊id為2的商品,則list ="1,2,";
因為?list+=request.getParameter("id")+","; 等同于 list = list +?request.getParameter("id")+","
即重新覆蓋原來字符串的意思。
2016-11-22
Cookie[]?cookies?=?request.getCookies();
??????????????//遍歷這個Cookies集合
??????????????if(cookies!=null&&cookies.length>0)
??????????????{
??????????????????for(Cookie?c:cookies)
??????????????????{
??????????????????????if(c.getName().equals("ListViewCookie"))
??????????????????????{
?????????????????????????list?=?c.getValue();
??????????????????????}
??????????????????}
??????????????}else{
????????????????????Cookie?cookie?=?new?Cookie("ListViewCookie",list);
?? ?? ??????????????response.addCookie(cookie);
???????????????? }
2016-11-22
c.getName().equals("ListViewCookie"),這段代碼是查找ListViewCookie,前面有條件?if(cookies!=null&&cookies.length>0),
Cookie?cookie?=?new?Cookie("ListViewCookie",list); response.addCookie(cookie);
這段代碼應(yīng)該放在前面if語句接else里面。
代碼錯了
2016-11-22
不對,第二次的話應(yīng)該是list="1,沃特籃球鞋2,"。
也就是說正確的話應(yīng)該到第二次的時候list="沃特籃球鞋1,安踏運動鞋2"
但還是不懂。