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生鲜电商平台-商品基础业务架构设计-商品设计 在生鲜电商的商品中心,在电子商务公司一般是后台管理商品的地方.在前端而言,是商家为了展示商品信息给用户的地方,它是承担了商品的数据,订单,营销活动 ...
随机推荐
- python 中的异常处理与种类
异常处理是Python工程中补课避免的,进行异常处理,可以帮我们调试代码,使代码找起问题更加简单,更加容易哦. 一般都是利用Try,比较简单,代码也不复杂. try: print 'try...' r ...
- 【转】链接任意目录下库文件(解决错误“/usr/bin/ld: cannot find -lxxx”
netbeans构建项目也出现了同样的问题.猜测是netbeans内部就用的是-l 这种编译方式,所以需要把***.a手动改为lib***.a 原文地址:链接任意目录下库文件(解决错误“/usr/bi ...
- Struts2 引入
引入: 说:如果一个路径想访问一个类,需求怎么做? 第一种方法,用servlet 第二种方法,用过滤器 第三种方法如下图:把路径和方法都存到map里面,用反射可以执行类下的方法 第三中方法 ...
- Dev Envirenment - VS Code && C++ && MinGW
1. 安装编译器 安装 MinGW-W64 添加系统环境变量 注意: 1)安装 MinGW 的时候要选择正确的 CPU 处理器类型 2)添加系统变量后需要重启电脑系统 2. 安装本文编辑器 安装 VS ...
- SQL server 提取字符中第一次和最后一次出现的数字
CREATE FUNCTION [dbo].[StringExtractNumber(FirstOrLast)](@address nvarchar(max),@firstOrLast INT) re ...
- c# 大文件分割 复制 Filestream 进度条
大文件分割复制,每次复制100M 也可以复制别的较大数值. 小于1G的小文件就直接复制得了.代码里没写 ,但是很简单 直接写进去就好了,难得是分割复制 所以没写. 好吧 我还是改了 改成小文件也可以复 ...
- mac的idea不能编辑问题
在安装的时候,因为在选择插件的时候,把IDEAVim这个玩意儿选上了.所以,编辑模式就跟命令行里面的Vim一样.输入时,需要先输入i, 进入insert模式下,然后才可以编辑.彻底解决办法就是进入Pr ...
- Kafka学习文档
本教程假定您是一只小白,没有Kafka 或ZooKeeper 方面的经验. Kafka脚本在Unix和Windows平台有所不同,在Windows平台,请使用 bin\windows\ 而不是bin/ ...
- [SinGuLaRiTy] 数论题目复习
[SinGuLaRiTy-1020] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 1464] Hankson 题目描述 H ...
- Cannot find module 'webpack/bin/config-yargs'
1.版本不兼容 npm install webpack-dev-server@1.15.0 -g