之前介绍过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. Luogu 3466 [POI2008]KLO-Building blocks

    BZOJ 1112. 题意相当于在一个长度为$k$的区间内选择一个数$s$使$\sum_{i = 1}^{k}\left | a_i - s \right |$最小. 很显然是中位数. 然后只要写一个 ...

  2. widget自定义控件【android.view.InflateException: Binary XML file line #2: Error inflating class...】

    此错误比较难定位,场景是这样的:在一个widget中使用了自定义控件,始终会报 android.view.InflateException: Binary XML file line #2: Erro ...

  3. 点石成金:访客至上的网页设计秘笈(原书第2版) 中文PDF版

    可用性设计是Web设计中最重要也是难度最大的一项任务.本书作者根据多年从业的经验,剖析用户的心理,在用户使用的模式.为扫描进行设计.导航设计.主页布局.可用性测试等方面提出了许多独特的观点,并给出了大 ...

  4. 数据加密实战之记住密码、自动登录和加密保存数据运用DES和MD5混合使用

    MD5的简介:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有 ...

  5. 动态合并GridView数据行DataRow的列

    前段时间,Insus.NET一直在演示GridView控件Header头行或列:<动态变更GridView控件列名>和<动态合并或定制GridView控件Header头某些列> ...

  6. C++日志模块实现的经验之谈

    以类的方式对日志模块进行封装,可创建一个单实例的接口或创建一个全局的日志对象指针,同时提供相应的对外写日志接口. 写日志的接口采用可变参数来建立,可使用va_list类型和##args参数,同时在写日 ...

  7. Ubuntu16.04跑loam_velodyne

    Ubuntu16.04,ros kinetic 其实按照github上的README.md来编译就好 cd ~/catkin_ws/src git clone https://github.com/l ...

  8. nginx架构与基础概念

    1       Nginx架构 Nginx 高性能,与其架构有关. Nginx架构: nginx运行时,在unix系统中以daemon形式在后台运行,后台进程包含一个master进程和多个worker ...

  9. hpp文件简介

    Boost库文件采用的.hpp的后缀,而不是分成两个文件,也就是”.h+.cpp”,之所以这样做是有理由的,首先就是与普通的C/C++头文件区分,另外一个原因就是使Boost库不需要预先编译,直接引用 ...

  10. 【转】windows server 2012 R2搭建IIS服务器

    源地址:http://blog.csdn.net/microsoft_wu/article/details/46521017