Cookie在工作中的使用,最近項目寫到了用戶瀏覽商品模塊,用到了cookie對象,把我對cookie的認識分享給大家。cookie簡稱小餅干,大家應該知道吧,cookie屬於存儲在客戶端,也就是瀏覽器端,它儲存的大小是有限制的,根據各個瀏覽器不同大小也不同。下麵是商城的瀏覽記錄模塊的技術實現。 首 ...
Cookie在工作中的使用,最近項目寫到了用戶瀏覽商品模塊,用到了cookie對象,把我對cookie的認識分享給大家。cookie簡稱小餅干,大家應該知道吧,cookie屬於存儲在客戶端,也就是瀏覽器端,它儲存的大小是有限制的,根據各個瀏覽器不同大小也不同。下麵是商城的瀏覽記錄模塊的技術實現。
首先技術分析:
Cookie cookie = new Cookie(cookiename,cookievalue);//創建cookie
response.addCookie(cookiename);//把cookie添加到瀏覽器中
Cooklies [] cookies = request.getCookies(); //獲取所有的cookie
這裡我準備了一個util工具類,根據傳入的cookie名稱返回對象的cookie
public static Cookie findCookie(Cookie[] cookies ,Cookie cookie){
//判斷cookies是否為空
if(cookies != null){
//不等於空遍歷每一個cookie
for(Cookie c: cookies){
//獲取每一個的value如果value等於我傳入的cookie就返回
String value = c.getValue();
if(value.equals(cookie)){
return c;
}
}
//如果找不到直接返回空
return null;
}
}
步驟分析:
1.當點擊各個商品時進入productListHistoryServlet
2.獲取傳來的商品id
3.獲取cookie如果為null 就創建cookie
4.如果不為null,獲取cookie的值按“-”分割(這裡我用的是linkedList)
5.判斷是否包含,如果包含就把最後一個刪除
6.否則判斷是否大於等於7,如果大於等於7把最後一個刪除,將當前id添加到第一個
7.不大於等於7就直接添加到第一個
8.最後處理數據 分別給每個id後添加“-”,將最後一個“-”刪除
9.添加到頁面中將cookie
代碼實現:
//獲取id
String id = request.getParameter("id");
//獲取cookie如果為null 就創建cookie
Cookie[] cookies = request.getCookies();
//調用工具類
Cookie cookie = util.findCookie(cookies,history);
//獲取cookie如果為null 就創建cookie
if(cookie==null){
Cookie cookie = new Cookie("history")
response.addCookie(cookie);
}else{
//如果不為null,獲取cookie的值按“-”分割(這裡我用的是linkedList)
String value = cookie.getValue();
String[] ids = value.spilt("-");
//調用linkedlist構造方法將數組轉換成linkedlist 因為數組直接操作元素不能增刪,我考慮用到linkedlist
LinkedList<Stirng> list = new LinkedList<String>(Arrays.asList(ids));
//判斷是否包含,如果包含就把最後一個刪除
if(list.contains(id)){
list.remove(id);
list.addFirst(id);
}else{
//否則判斷是否大於等於7,如果大於等於7把最後一個刪除,將當前id添加到第一個
if(list.size()>=7){
list.removeLast();
list.addFrist(id);
}else{
//不大於7
list.addFirst(id);
}
//最後處理數據 分別給每個id後添加“-”,將最後一個“-”刪除
//創建StringBuffer
StringBuffer sb = new StringBuffer();
//遍歷list
for(String s : list){
sb.append(s+"-");
}
String val = sb.toString().subString(0,sb.length-1);
//覆蓋cookie
Cookie c = new Cookie("history",val);
c.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}
}
心好累啊,每天熬夜到2點鐘事情太多了還請了兩天假落了好多東西不想寫了就到這裡吧,洗洗睡覺。。。加油少年