之前介绍过cookie和session的原理和区别。下面举例说明一下cookie在实际项目中的使用。
使用cookie实现购物车功能:

  • 1.往购物车添加商品
  • 2.从购物车里移除商品

主要是要点是:以产品id作为主键进行判断。如果这个添加的产品id信息已经在cookie里面存在,则添加失败(这里不考虑同一个商品重复添加多个的问题。因为只是cookie的简单举例);否则则把该产品的信息保存在cookie里面。
因此存在用户手动清楚cookie的情况,所以需要判断:

 if(cookieMap.containsKey(key)){
...
} else {
//移除购物车商品失败
}

完整代码如下:

 import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; /**
* 我的购物车
* @author Administrator
*
*/
public class MyShoppingCar { /**
* 添加商品
* @param request
* @param response
* @param prodId 商品id
* @param prodPrice 商品价格
* @return
* @throws Exception
*/
public static JSONObject addInShoppingCar(HttpServletRequest request,HttpServletResponse response,String opId,String prodId,String prodPrice) throws Exception{
//保存在cookie
String key = opId;
String value = prodId + "*" + prodPrice;
if("".equals(key)||"".equals(value)){
throw new Exception("操作员信息不存在或者商品信息不存在,请联系管理员");
}
JSONObject jsonObject = new JSONObject(true);
Map<String,Cookie> cookieMap = ReadCookieMap(request);//key--cookie if(cookieMap.containsKey(key)){
Cookie cookie = cookieMap.get(key);
String cookieVal = cookie.getValue();
String[] vals = cookieVal.split(",");
for (int i = 0; i < vals.length; i++) {
if(prodId.equals(vals[i].split("\\*")[0])){
jsonObject.put("status", "-1");
jsonObject.put("msg", "添加购物车失败");
return jsonObject;
} else {
if("".equals(cookieVal) || null == cookieVal){
cookieVal = value;
} else {
cookieVal += "," + cookieVal;
}
cookie.setValue(value);
cookie.setPath("/");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
}
}
} else {
Cookie newCookie = new Cookie(key,value);
newCookie.setMaxAge(24*60*60);
newCookie.setPath("/");
response.addCookie(newCookie);
}
jsonObject.put("status", "1");
jsonObject.put("msg", "添加购物车成功");
return jsonObject;
} /**
* 返回cookieMap
* @param request
* @return
*/
private static Map<String, Cookie> ReadCookieMap(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
Map<String,Cookie> cookieMap = null;
if(null != cookies && cookies.length>0){
cookieMap = new HashMap<String,Cookie>();
for (int i = 0; i < cookies.length; i++) {
cookieMap.put(cookies[i].getName(), cookies[i]);
}
}
return cookieMap;
} /**
* 移除购物车里面的商品
* @param request
* @param response
* @param opId
* @param prodId
* @return
*/
public static JSONObject delFromShoppingCar(HttpServletRequest request,HttpServletResponse response,String opId,String prodId){
JSONObject jsonObject = new JSONObject();
Map<String, Cookie> cookieMap = ReadCookieMap(request);
if(cookieMap.containsKey(opId)){
Cookie cookie = cookieMap.get(opId);//123*34,234*45,456*67
String cookieVal = cookie.getValue();
String[] cvalue = cookieVal.split(",");
String newCval = "";
for (int i = 0; i < cvalue.length; i++) {
if(!prodId.equals(cvalue[i].split("\\*")[0])){
if("".equals(newCval) || null == newCval ){
newCval = cvalue[i];
} else {
newCval += "," + cvalue[i];
}
}
}
//删除cookie
cookie.setMaxAge(0);
//重新创建cookie并保存购物车商品信息
Cookie newCookie = new Cookie(opId,newCval);
newCookie.setPath("/");
newCookie.setMaxAge(24*60*60);
response.addCookie(newCookie);
jsonObject.put("status", "1");
jsonObject.put("msg", "删除商品成功"); } else {
jsonObject.put("status", "-1");
jsonObject.put("msg", "删除商品失败");
}
return jsonObject;
}
}

cookie使用举例(添加购物车商品_移除购物车商品)的更多相关文章

  1. session购物车中的移除功能部分(学生笔记)

    function onclick_remove(r) { if (confirm("确认删除么!此操作不可恢复")) { var out_momey = $(".out_ ...

  2. PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆

    PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆  什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...

  3. jquery 无刷新添加/删除 input行 实时计算购物车价格

    jquery 无刷新添加/删除 input行 实时计算购物车价格 jquery 未来事件插件jq_Live_Extension.js 演示 <script> $(document).rea ...

  4. JAVAEE——宜立方商城09:Activemq整合spring的应用场景、添加商品同步索引库、商品详情页面动态展示与使用缓存

    1. 学习计划 1.Activemq整合spring的应用场景 2.添加商品同步索引库 3.商品详情页面动态展示 4.展示详情页面使用缓存 2. Activemq整合spring 2.1. 使用方法 ...

  5. Laravel5 cookie和session设置 Cookie::queue()自动添加

    Cookies Laravel会加密所有已创建的cookie信息,并附加上授权码,当客户端擅自修改cookie信息时,该cookie将被废弃,从而保证安全性. 获取一个指定的cookie值 $valu ...

  6. Java 添加、更新和移除PDF超链接

    简介 PDF超链接用一个简单的链接包含了大量的信息,满足了人们在不占用太多空间的情况下渲染外部信息的需求.下面将介绍通过Java 在PDF中添加.更新和移除超链接. (一)工具使用: Free Spi ...

  7. jq select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性

    select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性 $("#IsRecommend").change(function ...

  8. C#对字典Dictionary 的添加,遍历,移除系列操作

    C#对字典Dictionary 的添加,遍历,移除系列操作: //一.创建泛型哈希表,然后加入元素 Dictionary<string, string> oscar = new Dicti ...

  9. Java生鲜电商平台-商品基础业务架构设计-商品设计

    Java生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...

随机推荐

  1. js定时任务

    <input type="button" id="btn" value="保存图片" onclick="settime(th ...

  2. Python程序设计8——网络编程

    Python是一个很强大的网络编程工具,python内有很多针对场景网络协议的库,在库顶部可以获得抽象层,这样就可以集中精力在程序的逻辑处理上,而不是停留在网络实现的细节中. 1 少数几个网络设计模块 ...

  3. LeetCode第496题:下一个更大元素 I

    问题描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...

  4. python:格式化输出整数

    import math #default print "PI = %f" % math.pi #width = 10,precise = 3,align = left print ...

  5. java 集合(转载)

    一.集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...

  6. [SinGuLaRiTy] 2017-07-26 综合性测试

    [SinGuLaRiTy-1032] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved.               单词 (word) 题目描述 ...

  7. Python 文件和异常

    一.从文件中读取数据 #!/usr/bin/env python with open('pi') as file_object: contents = file_object.read() print ...

  8. [Swift实际操作]九、完整实例-(7)登录页面:创建自定义视图及相关组件Swift实际操作

    本文将开始创建登录页面,首先创建该页面所需的一些自定义组件:做为登录按钮的自定义视图对象.在[RegLogin]组的名称上点击鼠标右键,打开右键菜单.[New File]->[Cocoa Tou ...

  9. http 与 TCP 与 socket 定义,区别

    http://blog.csdn.net/jenminzhang/article/details/47017741 http协议:处于互联网协议的应用层,角色是规定数据传输的格式,http是建立在so ...

  10. ie7,ie8 js中变量名和页面元素ID重名,报错

    js变量名和一个div的id重名,报错.不知所以然...做个标记