cookie使用举例(添加购物车商品_移除购物车商品)
之前介绍过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使用举例(添加购物车商品_移除购物车商品)的更多相关文章
- session购物车中的移除功能部分(学生笔记)
function onclick_remove(r) { if (confirm("确认删除么!此操作不可恢复")) { var out_momey = $(".out_ ...
- PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆
PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆 什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...
- jquery 无刷新添加/删除 input行 实时计算购物车价格
jquery 无刷新添加/删除 input行 实时计算购物车价格 jquery 未来事件插件jq_Live_Extension.js 演示 <script> $(document).rea ...
- JAVAEE——宜立方商城09:Activemq整合spring的应用场景、添加商品同步索引库、商品详情页面动态展示与使用缓存
1. 学习计划 1.Activemq整合spring的应用场景 2.添加商品同步索引库 3.商品详情页面动态展示 4.展示详情页面使用缓存 2. Activemq整合spring 2.1. 使用方法 ...
- Laravel5 cookie和session设置 Cookie::queue()自动添加
Cookies Laravel会加密所有已创建的cookie信息,并附加上授权码,当客户端擅自修改cookie信息时,该cookie将被废弃,从而保证安全性. 获取一个指定的cookie值 $valu ...
- Java 添加、更新和移除PDF超链接
简介 PDF超链接用一个简单的链接包含了大量的信息,满足了人们在不占用太多空间的情况下渲染外部信息的需求.下面将介绍通过Java 在PDF中添加.更新和移除超链接. (一)工具使用: Free Spi ...
- jq select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性
select change下拉框选项变化判断选中值,添加(attr)或移除(removeAttr)一个或多个属性 $("#IsRecommend").change(function ...
- C#对字典Dictionary 的添加,遍历,移除系列操作
C#对字典Dictionary 的添加,遍历,移除系列操作: //一.创建泛型哈希表,然后加入元素 Dictionary<string, string> oscar = new Dicti ...
- Java生鲜电商平台-商品基础业务架构设计-商品设计
Java生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...
随机推荐
- Git 之 与Github交互
我们不可能只在一台电脑上开发,白天在公司用公司电脑,晚上在家可以用自己电脑.但是这个代码怎么让两台电脑同步呢?总不能用U盘复制粘贴.太繁琐. 这里我们就可以找个代码托管的平台,帮我们做这件事. Git ...
- Bootstrap 组件之 List group
简介 List group 指列表.当然,Bootstrap 列表不局限于由 <ul> 和 <li> 标签构成的. Bootstrap 中一共三种列表的构成方式,这里 有一个例 ...
- Leafletjs学习教程和相关代码整理
一.Leaflet简介 官方网站:http://leafletjs.com/ 官网上的api和例子大家多看看,多学习学习. Lefalet 是一个为建设移动设备友好的互动地图,而开发的现代的.开源的 ...
- 【android】shape的使用
例子:XML 文件保存在 res/drawable/gradient_box.xml: <?xml version="1.0" encoding="utf-8&qu ...
- [SinGuLaRiTy] 高一下半期测试
[SinGuLaRiTy-1017] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有的题目: Time Limit: 1s | Me ...
- SP18637 LAWRENCE - Lawrence of Arabia
\(\color{#0066ff}{ 题目描述 }\) 给定一个长度为n的序列,至多将序列分成m+1段,每段序列都有权值,权值为序列内两个数两两相乘之和.求序列权值和最小为多少? \(\color{# ...
- C++并发低级接口:std::thread和std::promise
std::thread和std::promise 相比std::async,std::thread就原始多了.thread一定会创建新线程(而不是像async那样创建的时候可能不会,后面才创建新线程( ...
- How to grow up as a BA
简书 https://www.jianshu.com/p/8f62b5c7fe1b Thoughtworks https://mp.weixin.qq.com/s/n1hGAM2nUoLvkE5xuU ...
- matplotlib类
1.plt.subplot 在matplotlib下,一个Figure对象可以包含多个子图(Axes),可以使用subplot()快速绘制,其调用形式如下:subplot(numRows, numCo ...
- 在生产环境下禁用swagger
学习目标 快速学会使用注解关闭Swagger2,避免接口重复暴露. 使用教程 禁用方法1:使用注解@Profile({"dev","test"}) 表示在开发或 ...