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生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...
随机推荐
- Luogu 2824 [HEOI2016/TJOI2016]排序
BZOJ 4552 挺妙的解法. 听说这题直接用一个桶能拿到$80 \ pts$ 发现如果是一个排列的话,要对这个序列排序并不好做,但是假如是$01$序列的话,要对一个区间排序还是很简单的. 发现最后 ...
- java全栈day13----Eclipse项目的jar包导出与使用jar包
01eclipse快捷键 Ctrl+T:查看所选中类的继承树 例如,在下面代码中,选中Teacher类名,然后按Ctrl+T,就会显示出Teacher类的继承关系 * B: 查看所选中方法的源代码 ...
- 缓存淘汰算法之LRU
1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...
- 用Pdg2.DLL解码PDG的境界
作者:马健邮箱:stronghorse_mj@hotmail.com发布:2008.08.03 一.入门级原理:按照<用BCB实现超星格式转换为BMP格式>中说的方法调用Pdg2.DLL接 ...
- Sqlserver根据条件去除重复数据并且留下的是最大值数据
项目中需要根据条件获取一些数据,但是如果条件相同的情况下,要去掉条件一样的并且某个值是最小的数据,留下的是最大值数据. 简单记录一下sql: --去重保留最大值那条 --Year和MCode一样的前提 ...
- UIViewController+MJPopupViewController
1.MJPopupBackgroundView 1.1 MJPopupBackgroundView.h // // MJPopupBackgroundView.h // watched // // C ...
- Centos7 调整磁盘空间
1. 查看磁盘空间占用情况: df -h 可以看到 /home 有很多剩余空间, 而节点较少. 2. 备份 /home 下的内容: cp -r /home/ homebak/ 3. 关闭home进程 ...
- mybatis 日期查询datetime
<select id="getHistoryDataByDate" parameterType="java.util.HashMap" resultTyp ...
- git 本地分支与远程分支相关操作记录
1.远程分支中有新增分支,但自己的本地分支没有对应同步 git checkout -b [remote-branch-name] origin/[remote-branch-name] 2. 查看本地 ...
- 黑马MySQL数据库学习day04 MySQL变量 存储过程 用户和授权管理
/* MySQL中的变量局部变量,用户变量,会话变量和全局变量. 用户变量不用定义,直接使用. 1.用户变量赋值 set @xxx = 值; 2.查询 select @xxx; 语法帮助: 过程保存在 ...