之前介紹過cookie和session的原理和區別。下面舉例說明一下cookie在實際項目中的使用。
使用cookie實現購物車功能:
- 1.往購物車添加商品
- 2.從購物車里移除商品
主要是要點是:以產品id作為主鍵進行判斷。如果這個添加的產品id信息已經在cookie里面存在,則添加失敗(這里不考慮同一個商品重復添加多個的問題。因為只是cookie的簡單舉例);否則則把該產品的信息保存在cookie里面。
因此存在用戶手動清楚cookie的情況,所以需要判斷:
1 if(cookieMap.containsKey(key)){ 2 ... 3 } else { 4 //移除購物車商品失敗 5 }
完整代碼如下:
1 import java.util.HashMap; 2 import java.util.Map; 3 import javax.servlet.http.Cookie; 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 7 import net.sf.json.JSONObject; 8 9 /** 10 * 我的購物車 11 * @author Administrator 12 * 13 */ 14 public class MyShoppingCar { 15 16 /** 17 * 添加商品 18 * @param request 19 * @param response 20 * @param prodId 商品id 21 * @param prodPrice 商品價格 22 * @return 23 * @throws Exception 24 */ 25 public static JSONObject addInShoppingCar(HttpServletRequest request,HttpServletResponse response,String opId,String prodId,String prodPrice) throws Exception{ 26 //保存在cookie 27 String key = opId; 28 String value = prodId + "*" + prodPrice; 29 if("".equals(key)||"".equals(value)){ 30 throw new Exception("操作員信息不存在或者商品信息不存在,請聯系管理員"); 31 } 32 JSONObject jsonObject = new JSONObject(true); 33 Map<String,Cookie> cookieMap = ReadCookieMap(request);//key--cookie 34 35 if(cookieMap.containsKey(key)){ 36 Cookie cookie = cookieMap.get(key); 37 String cookieVal = cookie.getValue(); 38 String[] vals = cookieVal.split(","); 39 for (int i = 0; i < vals.length; i++) { 40 if(prodId.equals(vals[i].split("\\*")[0])){ 41 jsonObject.put("status", "-1"); 42 jsonObject.put("msg", "添加購物車失敗"); 43 return jsonObject; 44 } else { 45 if("".equals(cookieVal) || null == cookieVal){ 46 cookieVal = value; 47 } else { 48 cookieVal += "," + cookieVal; 49 } 50 cookie.setValue(value); 51 cookie.setPath("/"); 52 cookie.setMaxAge(24*60*60); 53 response.addCookie(cookie); 54 } 55 } 56 } else { 57 Cookie newCookie = new Cookie(key,value); 58 newCookie.setMaxAge(24*60*60); 59 newCookie.setPath("/"); 60 response.addCookie(newCookie); 61 } 62 jsonObject.put("status", "1"); 63 jsonObject.put("msg", "添加購物車成功"); 64 return jsonObject; 65 } 66 67 /** 68 * 返回cookieMap 69 * @param request 70 * @return 71 */ 72 private static Map<String, Cookie> ReadCookieMap(HttpServletRequest request) { 73 Cookie[] cookies = request.getCookies(); 74 Map<String,Cookie> cookieMap = null; 75 if(null != cookies && cookies.length>0){ 76 cookieMap = new HashMap<String,Cookie>(); 77 for (int i = 0; i < cookies.length; i++) { 78 cookieMap.put(cookies[i].getName(), cookies[i]); 79 } 80 } 81 return cookieMap; 82 } 83 84 /** 85 * 移除購物車里面的商品 86 * @param request 87 * @param response 88 * @param opId 89 * @param prodId 90 * @return 91 */ 92 public static JSONObject delFromShoppingCar(HttpServletRequest request,HttpServletResponse response,String opId,String prodId){ 93 JSONObject jsonObject = new JSONObject(); 94 Map<String, Cookie> cookieMap = ReadCookieMap(request); 95 if(cookieMap.containsKey(opId)){ 96 Cookie cookie = cookieMap.get(opId);//123*34,234*45,456*67 97 String cookieVal = cookie.getValue(); 98 String[] cvalue = cookieVal.split(","); 99 String newCval = ""; 100 for (int i = 0; i < cvalue.length; i++) { 101 if(!prodId.equals(cvalue[i].split("\\*")[0])){ 102 if("".equals(newCval) || null == newCval ){ 103 newCval = cvalue[i]; 104 } else { 105 newCval += "," + cvalue[i]; 106 } 107 } 108 } 109 //刪除cookie 110 cookie.setMaxAge(0); 111 //重新創建cookie並保存購物車商品信息 112 Cookie newCookie = new Cookie(opId,newCval); 113 newCookie.setPath("/"); 114 newCookie.setMaxAge(24*60*60); 115 response.addCookie(newCookie); 116 jsonObject.put("status", "1"); 117 jsonObject.put("msg", "刪除商品成功"); 118 119 } else { 120 jsonObject.put("status", "-1"); 121 jsonObject.put("msg", "刪除商品失敗"); 122 } 123 return jsonObject; 124 } 125 }