用Session和Cookie两种方法实现购物车

用Session和Cookie两种方法实现购物车
用Session和Cookie两种方法实现购物车

https://www.360docs.net/doc/a418480181.html,中购物车的两种存储方式Session和Cookie的应用实例收藏

1.这是用Cookie存储的购物车的几种常用的操作:

///

/// 使用Cookie的购物车

///

public class CookieCar {

public const string COOKIE_CAR = "Car"; //cookie中的购物车

///

/// 无参数的构造方法

///

public CookieCar() {

}

///

/// 添加商品到购物车

///

///

///

public void AddProductToCar(string id, string quantity) {

string product = id + "," + quantity;

//购物车中没有该商品

if (!VerDictCarIsExit(id)) {

string oldCar = GetCarInfo();

string newCar = null;

if (oldCar != "") {

oldCar += "|";

}

newCar += oldCar + product;

AddCar(newCar);

}

else {

int count = int.Parse(GetProductInfo(id).Split(',')[1].ToString());

UpdateQuantity(id, count + 1);

}

}

///

/// 添加商品的数量

///

///

public void UpdateQuantity(string id, int quantity) {

//得到购物车

string products = GetCarInfo();

products = "|" + products + "|";

string oldProduct = "|" + GetProductInfo(id) + "|";

if (products != "") {

string oldCar = GetCarInfo();

string newProduct = "|" + id + "," + quantity + "|";

products = products.Replace(oldProduct, newProduct);

products = products.TrimStart('|').TrimEnd('|');

AddCar(products);

}

}

///

/// 得到购物车

///

///

public string GetCarInfo() {

if (HttpContext.Current.Request.Cookies[COOKIE_CAR] != null) {

return HttpContext.Current.Request.Cookies[COOKIE_CAR].Value.ToString();

}

return "";

}

///

/// 根据ID得到购物车中一种商品的信息

///

///

///

private string GetProductInfo(string id) {

string productInfo = null;

//得到购物车中的所有商品

string products = GetCarInfo();

foreach (string product in products.Split('|')) {

if (id == product.Split(',')[0]) {

productInfo = product;

break;

}

}

return productInfo;

}

///

/// 加入购物车

///

private void AddCar(string product) {

HttpCookie car = new HttpCookie(COOKIE_CAR, product);

car.Expires = DateTime.Now.AddDays(7);

HttpContext.Current.Response.Cookies.Remove(COOKIE_CAR);

HttpContext.Current.Response.Cookies.Add(car);

}

///

/// 判断商品是否存在

///

///

///

private bool VerDictCarIsExit(string id) {

//存在的标志: true 有,false 没有

bool flag = false;

//得到购物车中的所有商品

string products = GetCarInfo();

foreach (string product in products.Split('|')) {

if (id == product.Split(',')[0]) {

flag = true;

break;

}

}

return flag;

}

///

/// 通过商品编号删除订单

///

///

public void DeleteProduct(string id) {

string oldProduct = GetProductInfo(id);

oldProduct = "|"+oldProduct+"|";

string products = GetCarInfo();

if(products != "") {

products = "|"+products+"|";

products = products.Replace(oldProduct, "|");

products = products.TrimStart('|').TrimEnd('|');

AddCar(products);

}

}

///

/// 晴空购物车

///

public void ClearCar() {

AddCar("");

}

///

/// 确认订单

///

public void ConfirmOrder(System.Web.UI.Page page, double orderTotalPrice, User user) { //得到订单信息

string products = GetCarInfo();

if (products != "") {

string message =null;

if (ProductManager.OrderConfirm(products, orderTotalPrice, user, out message)) { ClearCar();

}

Javascript.Alert(page, message, "Default.aspx");

}

else {

Javascript.Alert(page, "订单为空,请选择商品!", "ProductList.aspx");

}

}

}

///

/// 得到购物车数据

///

public DataSet GetCarData(GridView gv) {

string carInfo = new CookieCar().GetCarInfo();

if (carInfo != "") {

string sql = "";

foreach (string product in carInfo.Split('|')) {

int id = int.Parse(product.Split(',')[0].ToString());

int buyCount = int.Parse(product.Split(',')[1].ToString());

if (sql != "") {

sql += " union ";

}

sql += "select *, " + buyCount + " as buyCount, Price*" + buyCount + " as totalPrice from Products where Id = " + id;

}

TotalPrice(gv); //计算总价

return ProductManager.GetCarBySql(sql);

}

else {

Javascript.GoError("购物车为空,请选择商品!");

}

return null;

}

///

/// 计算总价

///

public double TotalPrice(GridView gv) {

double totalCarPrice = 0d;

foreach (GridViewRow row in gv.Rows) {

int rowIndex = row.RowIndex;

double totalPrice = double.Parse((gv.Rows[rowIndex].FindControl("lblTotalPrice") as Label).Text.ToString());

totalCarPrice += totalPrice;

}

return totalCarPrice;

}

2.这是用Session存储的购物车:

///

/// 使用Session的购物车

///

public class SessionCar {

private const string SESSION_CAR = "Car";

///

/// 无参数的购物车

///

public SessionCar() {

}

///

/// 添加商品到购物车

///

public void AddCart(Product product) {

if (HttpContext.Current.Session["CurrentUser"] != null) {

if (HttpContext.Current.Session[SESSION_CAR] == null) {

BuildCart(product);

}

else {

DataTable cart = HttpContext.Current.Session[SESSION_CAR] as DataTable;

if (ExistProduct(cart, product.Id)) {

this.BuildSession(cart, product);

}

}

HttpContext.Current.Response.Redirect("Cart.aspx");

}

else {

HttpContext.Current.Response.Redirect("Login.aspx");

}

}

///

/// 已有产品

///

///

///

public bool ExistProduct(DataTable cart, int id) {

foreach (DataRow dr in cart.Rows) {

if (dr["Id"].ToString().Equals(id.ToString())) {

dr["buyCount"] = Convert.ToInt32(dr["buyCount"]) + 1;

HttpContext.Current.Session[SESSION_CAR] = cart;

HttpContext.Current.Response.Redirect("Cart.aspx");

}

}

return true;

}

///

/// 新建购物车

///

public void BuildCart(Product product) {

DataTable cart = new DataTable();

DataColumn[] dc = new DataColumn[] {

new DataColumn("Id"),

new DataColumn("Name"),

new DataColumn("buyCount"),

new DataColumn("Price"),

new DataColumn("Picture"),

new DataColumn("Number"),

new DataColumn("SellNumber")

};

cart.Columns.AddRange(dc);

BuildSession(cart, product);

}

///

/// 添加新商品

///

///

public void BuildSession(DataTable cart, Product product) {

DataRow dr = cart.NewRow();

dr[0] = product.Id;

dr[1] = https://www.360docs.net/doc/a418480181.html,;

dr[2] = "1";

dr[3] = product.Price;

dr[4] = product.Picture;

dr[5] = product.Number;

dr[6] = product.SellNumber;

cart.Rows.Add(dr);

HttpContext.Current.Session[SESSION_CAR] = cart;

}

public DataTable GetCar() {

if (HttpContext.Current.Session[SESSION_CAR] != null) {

DataTable car = HttpContext.Current.Session[SESSION_CAR] as DataTable;

return car;

}

else {

return null;

}

}

///

/// 计算总价

///

///

public double TotalPrice(DataTable cart) {

double total = 0;

foreach (DataRow dr in cart.Rows) {

total += Convert.ToDouble(dr["Price"]) * (Convert.ToInt32(dr[2].ToString()));

}

return total;

}

}

实在

本文来自CSDN博客,转载请标明出处:

https://www.360docs.net/doc/a418480181.html,/devidpitoushi/archive/2009/05/12/4173121.aspx

深入理解ServletJSP之Cookie和Session原理

由于H T T P协议的无状态特征,W e b应用中经常使用C o o k i e和S e s s i o n来保存用户在与系统交互过程中的状态数据。下面通过分析H T T P协议对C o o k i e和S e s s i o n的工作原理加以了解。 一、C o o k i e C o o k i e的含义是“服务器送给浏览器的甜点”,即服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的C o o k i e通过请求信息带到服务器端。 下面的S e r v l e t展示了C o o k i e的功能。 ......... p u b l i c v o i d d o G e t(H t t p S e r v l e t R e q u e s t r e q u e s t,H t t p S e r v l e t R e s p o n s e r e s p o n s e) t h r o w s S e r v l e t E x c e p t i o n,I O E x c e p t i o n{ r e s p o n s e.s e t C o n t e n t T y p e("t e x t/h t m l"); P r i n t W r i t e r o u t=r e s p o n s e.g e t W r i t e r(); S t r i n g o p t i o n=r e q u e s t.g e t P a r a m e t e r("o p t i o n"); i f("s h o w".e q u a l s(o p t i o n)){ //获得请求信息中的C o o k i e数据 C o o k i e[]c o o k i e s=r e q u e s t.g e t C o o k i e s(); i f(c o o k i e s!=n u l l){ //找出名称(键)为“c o o l”的C o o k i e f o r(i n t i=0;i"+c o o k i e s[i].g e t N a m e()+":" +c o o k i e s[i].g e t V a l u e()+""); } } } }e l s e i f("a d d".e q u a l s(o p t i o n)){ //创建C o o k i e对象 C o o k i e c o o k i e=n e w C o o k i e("c o o l","y e a h!"); //设置生命周期以秒为单位 c o o k i e.s e t M a x A g e(20); //添加C o o k i e r e s p o n s e.a d d C o o k i e(c o o k i e); }

java_jsp课程设计报告(网络购物车的实现) 2[1]

南阳理工学院 课程设计 课程设计名称:课程设计 专业班级:数据库一班 学生姓名:张文瑞 学号:1315925020 指导教师:

学生姓名张文瑞专业班级数据库学号1312925020 题目网络购物车 主要内容 淘宝、京东、易购等都是知名度很大的电子商务网站,而对于电子商务网站来说一个很重要的组成部分便是网络购物车,要求利用html、jsp、servlet、数据库等知识点,结合相关设计模式、以及软件工程的相关知识,在经过需求分析、总体设计、详细设计等流程步骤以后,设计一个网络购物车。主要功能是记录和操作不同客户的网上购物信息。该系统能对购物车中商品信息进行查询、增加、修改、删除、清空、下载等操作,商品信息存储在数据库中。 任务要求 综合运用所学的JAVA程序设计基本知识,并能通过查阅相关文献材料,独立完成该课题的设计开发工作。要求根据本课题设计合理的数据结构,并实现:商品展示、操作成功提示、购物车展示等视图界面;对商品信息的查询、增加、修改、删除、清空、下载等功能模块。 系统采用tomcat、记事本等开发工具进行开发实现。 根据系统功能,结合软件开发流程,完成设计报告的撰写。 参考文献[1](美)Cay S. Horstmann、Gary Cornell. Java核心技术卷I:基础知识(第 8版)(英文影印版).人民邮电出版社, 2008.11 [2]耿祥义、张跃平. JA V A2实用教程(修订). 清华大学出版社,2001.10 [3]杨小平java项目案例导航科学出版社,2003.7 [4]傅进勇、邓少烽、李波jsp网络编程电子工业出版社2008.5 网络购物车 一:需求分析 利用html、jsp、java、servlet、数据库等知识点,结合相关设计模式、以及软件工程的相关知识,设计一个网站购物车,用于记录不同客户的购物订单,

应用Servlet实现购物车

应用Servlet实现购物车 具体实现过程 1、创建封装商品信息的值JavaBean---------GoodsSingle package com.yxq.valuebean; public class GoodsSingle { private String name; //保存商品名称 private float price; //保存商品价格 private int num; //保存商品购买数量public String getName() { return name; } public void setName(String name) { https://www.360docs.net/doc/a418480181.html, = name; } public int getNum() { return num; } public void setNum(int num) { this.num = num; }

public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } } 2、创建工具JavaBean-------- MyTools 实现字符型数据转 换为整型及乱码处理 package com.yxq.toolbean; import java.io.UnsupportedEncodingException; public class MyTools { public static int strToint(String str){ //将String型数据转换为int型数据的方法 if(str==null||str.equals("")) str="0"; int i=0; try{ i=Integer.parseInt(str); //把str 转换成

JAVA 购物车实现

一下详细讲了一个JA V A购物车的实现方法!! 电子商务模型的JSP、JavaBean实现 现在,开发和管理一个电子商务系统需要高效率的开发和利用网络资源,特别是如果你想让你的顾客在网上购买你的产品或是取得你提供的服务的话,更要注意这一点。构建一个这样的商务网站来实现你商业上的目的并不是一件非常简单的工作,在开发电子商务网站的时候,我们就要充分的利用搞技术含量的技术,我们可以利用到最先进的Java 技术:Java Server Pages(JSP),Java Servlets 和JavaBeans(甚至是EJB),它们各自都有自己的不同的优点,因此了解在构建一个电子商务网站时如何合理的利用它们各自的优势,并且把它们联合起来以完成你想达到的效果是非常重要的。 当然,我们可以只使用JSP来构建电子商务系统,比如一个简单的购物车系统,但是如果你要想完成一个有效的的应用程序,并使它用于商业上,则需要综合以上我所说的三种技术相互补充的力量。让我们来看怎么把它们联合起来以完成最好的效果吧!我们都知道,JSP是Sun公司倡导的用来替代微软ASP的纯Java替代品,JSP技术发展壮大了Java Servlet 技术,事实上, JSP引擎在运行JSP时也把JSP页面翻译成Servlets;而不用我多说,大家一定都知道Servlets在网络编程世界是非常流行的,因为它在理论上和实践上都是可以完全取代CGI脚本的,Servlets能产生动态的网页,这是通过把静态的HTML与数据库查询或事务性服务提供的内容混合起来实现的。JSP则是通过在HTML页面中内嵌Java代码这条途径来实现生成动态的网页的目的的,把Java代码插入到HTML页的这种能力极大的增加了基于Java Servlet网络体系结构的灵活性。 为了产生HTML , servlet 必须用println()输出格式化的HTML字符串,如: out.println("<html>"); out.println("<br><br>购物车系统"); out.println("</html>"); 从上面的代码段中可以看出,servlet用println()输出HTML页面,也就是说,当编写一个Java Servlet时,开发者必须充当程序员和网页设计师两个身份。而JSP则是在HTML中嵌入简单的Java代码,使普通的HTML网页设计师也能写出优秀的动态网页,这样就使网站的设计沿着两条平行的轨道,即Java程序设计和HTML页面设计共同进行下去,从而加快网站开发的速度和开发的质量。JSP也支持业务逻辑组件和现有的组件之间的宽松连接,从而做到可重用性。 下面,我想通过一个简单的购物车程序来说明一下JSP,Servlet和Bean在网络体系结构中是怎样相互作用的,并且借这个例子解释编写一个实际可用的电子商务应用程序应该注意的一些问题。 简单购物车的实现方案 我们的购物车方案实际上是一种简化了的在线商店的模型:顾客选择商品,添加到他们的购物车中,然后通过一系列形式最终购买这些商品。上图中就显示了我们的应用程序体系

APPlication,Session和Cookie的区别

APPlication,Session 和Cookie 的区别 方法信息量大小 保存时间应用范围保存位置 Application 任意大小整个应用程序的生命期 所有用户服务器端Session 小量,简单的数据用户活动时间+一段延迟时间(一般为20分钟) 单个用户服务器端Cookie 小量,简单的数据可以根据需要设定 单个用户客户端1.Application 对象 Application 用于保存所有用户的公共的数据信息,如果使用Application 对象,一个需要考虑的问题是任何写操作都要在Application_OnStart 事件(global.asax)中完成.尽管使用Application.Lock 和Applicaiton.Unlock 方法来避免写操作的同步,但是它串行化了对Application 对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合 2.Session 对象 Session 用于保存每个用户的专用信息.她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).Session 中的信息保存在Web 服务器内容中,保存的数据量可大可小.当Session 超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session 对象使保存用户数据的方法效率很低.对于小量的数据,使用Session 对象保存还是一个不错的选择.使用Session 对象保存信息的代码如下:// 存放信息Session["username"]="zhouhuan";//读取数据string UserName=Session["username"].ToString(); 3.Cookie 对象 Cookie 用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie 失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie 对象的Expires 属性设置为Minvalue,则表示Cookie 永远不会过期.Cookie 存储的数据量很受限制,大多数浏览器支持最大容量为4096,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全

运用java语言设计购物车的实现

首先,建3个实体类,如下: package entity; //订单类 import java.util.Date; public class Order { private String orderId;//订单编号 private OrderItem[] items;//订单项 private Date date;//订单时间 private Float total;//订单总额 public Float getTotal() { return total; } public void setTotal(Float total) { this.total = total; } public String getOrderId() { return orderId; } public void setOrderId(String orderId) { this.orderId = orderId; } public OrderItem[] getItems() { return items; } public void setItems(OrderItem[] items) { this.items = items; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } package entity; //订单项,为了方便拓展 public class OrderItem { private Product product;//商品 private Integer number;//购买数量

java web之会话技术cookie+session

会话技术 1.什么是会话: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接、访问多少个资源,直到用户关闭浏览器,整个这个过程我们成为一次会话 2.实际情况: 张三打开浏览器,进入淘宝,买了2样东西;李四打开浏览器,进入淘宝,买了3样东西。当这两位结账时,结账的s e r v l e t如何得到张三和李四买的东西,并为他两分别结账? 3.使用会话保存数据 ?S e s s i o n ?C o o k i e 为什么需要C o o k i e? 情景1.张在访问某个网站的时候,看到了提示你上次登录网站的时间,而且不同用户上次登录时间不同,这个怎么实现 没有会话技术前:u s e r表每次用户登录就更新u s e r表里的时间 I d N a m e P a s s w o r d L o g i n_t i m e v i e w H i s t o r y 001A a A a2012-1-5 5:00:0022,33,2 5 002B b B b2012-3-12 6:00:0012,24,5 6 情景2.访问购物网的时候,能够看到曾经浏览过的商品,当然不同用户浏览过的商品不同 如果登录了,则可以用数据库 但如果没有登录那又怎么办?????? 情景3.保存登录密码及用户名 Cookie技术 1.服务器把每个用户的数据以cookie的形式写给用户各自的浏览器当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去 Servlet有一个Cookie类 Cookie(String name ,String value) 3.Cookie小结: ①Cookie在服务端创建 Cookie cookie = new Cookie(name,value); ②Cookie是保存在浏览器这端 response.addCookie(cookie); ③Cookie的生命周期可以通过cookie.setMaxAge(int second)来设置 Cookie默认生命周期是会话级别(即存储在浏览器的内存中) 如果没有设置setMaxAge(),则该cookie的生命周期当浏览器关闭时就挂了,setMaxAge(0) +response.addCookie(cookie),相当于删除Cookie 此时如果cookie文件内部只有该Cookie则,文件也一并删除;否则只删除该Cookie ④Cookie可以被多个浏览器共享

购物车设计与实现(1-基于数据库)

购物车设计与实现(1-基于数据库) 一、数据库设计: 1.Tcart表结构如下 2.Tuser表(删除了UserID字段,设置UserName为主键)

页面设计要点: 在该页面开发阶段,为了避免每次都要登陆,可以先在Session中建立UserName变量,赋一个存在的用户名. 在ViewBookDetail.aspx和ShopCart.aspx页的Page_load事件中加入下面一行代码: Session["UserName"]=‘liqin’; //测试用,网站联调时注释掉 一、设计购物车页面 1.用GridView控件显示购物车信息 通过编辑列添加以下字段(注意字段名与Cart类的属性cart中的各个列名一致),以显示购物车信息: BookID BookName Number Price 注意:为了实现就地编辑数量,数量Number用“模版”字段, 通过“编辑摸版”对话框,在其中加入一个TextBox 用于显示数量,以及两个用于修改数量的按扭. 分别设置其text属性为“+”和“-”,并通过“DataBindings”操作将其CommandArgument属性绑定到BookID字段,如图:

为了方便页面的编码,再分别设置按扭的CommandName属性与其Text属性相同。 二、页面关键编码: //1.在Page_Load事件中加入测试用代码,以模拟用户登录成功 protected void Page_Load(object sender, EventArgs e) { Session["UserName"] = "liqin"; //测试用用户,以免去开发阶段的登录操作 } // 2.PreRender为在页面控件已经加载但未呈现前发生的事件,在Page_Load后发生//在此事件中可以更新购物车中总金额和总数量的显示 protected void Page_PreRender(object sender, EventArgs e) { //定义变量:保存购物车中总数量和总金额 int TotalNum=0; Decimal TotalMoney=0; DataTable books; //当前用户的购物车中信息 //获取当前用户的购物车信息 books = TCart.GetCartByUsername(Session["UserName"].ToString()); if (books.Rows.Count == 0) { Label_num.Text = "你的购物车还是空的,快去选购吧"; return; } //将结果绑定到GridView上显示 GridView1.DataSource = books; GridView1.DataBind(); //统计购物车中总数量和总金额,两种方法 int num; //for (int i = 0; i < books.Rows.Count; i++)

几种session存储方式比较

几种session存储方式比较 1. 客户端cookie加密 这是我以前采用的方式,简单,高效。比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现。 问题:session中数据不能太多,最好只有个用户id。 参考实现:https://www.360docs.net/doc/a418480181.html, 2. application server的session复制 可能大部分应用服务器都提供了session复制的功能来实现集群,tomcat,jboss,was都提供了这样的功能。 问题: 性能随着服务器增加急剧下降,而且容易引起广播风暴; session数据需要序列化,影响性能。 如何序列化,可以参考对象的序列化和反序列化. 参考资料 Tomcat 5集群中的SESSION复制一 Tomcat 5集群中的SESSION复制二 应用服务器-JBoss 4.0.2集群指南 3. 使用数据库保存session 使用数据库来保存session,就算服务器宕机了也没事,session照样在。 问题: 程序需要定制; 每次请求都进行数据库读写开销不小(使用内存数据库可以提高性能,宕机就会丢失数据。可供选择的内存数据库有BerkeleyDB,MySQL的内存表); 数据库是一个单点,当然可以做数据库的ha来解决这个问题。 4. 使用共享存储来保存session 和数据库类似,就算服务器宕机了也没事,session照样在。使用nfs或windows文件共享都可以,或者专用的共享存储设备。 问题: 程序需要定制; 频繁的进行数据的序列化和反序列化,性能是否有影响; 共享存储是一个单点,这个可以通过raid来解决。 5. 使用memcached来保存session 这种方式跟数据库类似,不过因为是内存存取的,性能自然要比数据库好多了。 问题: 程序需要定制,增加了工作量; 存入memcached中的数据都需要序列化,效率较低; memcached服务器一死,所有session全丢。memchached能不能做HA 我也不知道,网站上没提。 参考资料 应用memcached保存session会话信息 正确认识memcached的缓存失效 扩展Tomcat 6.x,使用memcached存放session信息 6. 使用terracotta来保存session

c#下使用cookie和session

c#如何记住用户的信息 记录加密之后的信息,确保用户的信息安全 使用cookie和session记录用户的信息 1、保存时间 session的默认保存时间是24分钟 cookie在没有设置的情况下关闭之后立即结束生命周期 设置cookie的时间,cookie-name.Expires=Date.Now.AddDays();/DateTime.MaxValue;(永久) C#读取设置Cookie 设置: HttpCookie cookie = new HttpCookie("cookieName"); cookie.Value = "name1" HttpContext.Current.Response.Cookies.Add(cookie); 读取: HttpContext.Current.Request.Cookies["cookieName"].Value 判断cookie是否存在: if(HttpContext.Current.Request.Cookies["cookieName"]==null){ //do something } 设置cookie有效期 cookie.Expires = DateTime.Now.AddDays(1); https://www.360docs.net/doc/a418480181.html,中Cookies的用法(转) 一,cookies 写入 方法1: Response.Cookies["username"].Value="gjy"; Response.Cookies["username"].Expires=DateTime.Now.AddDays(1); 方法2: System.Web.HttpCookie newcookie=new HttpCookie("username"); newcookie.Value="gjy"; newcookie.Expires=DateTime.Now.AddDays(1); Response.AppendCookie(newcookie); 创建带有子键的cookies: System.Web.HttpCookie newcookie=new HttpCookie("user"); newcookie.Values["username"]="gjy"; newcookie.Values["password"]="111";

Cookie和Session的作用和工作原理

一、Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。为了做到这点,就需要使用到Cookie了。服务器可以设置或读取Cook ies中包含信息,借此维护用户跟服务器会话中的状态。 Cookie(复数形态:Cookies),是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 Cookie是由服务端生成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie: 内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。 硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。 (2)工作原理 1、创建Cookie 当用户第一次浏览某个使用Cookie的网站时,该网站的服务器就进行如下工作: ①该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象; ②默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(将最大时效设为0则是命令浏览器删除该Cookie); ③将Cookie放入到HTTP响应报头,将Cookie插入到一个Set-Cookie HTTP请求报头中。 ④发送该HTTP响应报文。 2、设置存储Cookie 浏览器收到该响应报文之后,根据报文头里的Set-Cookied特殊的指示,生成相应的Cookie,保存在客户端。该Cook ie里面记录着用户当前的信息。 3、发送Cookie 当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果某个存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将要请求的资源),则把该cookie附在请求资源的HTTP请求头上发送给服务器。 4、读取Cookie 服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的Cookie,从里面找到所需要的东西。 (3)作用 Cookie的根本作用就是在客户端存储用户访问网站的一些信息。典型的应用有: 1、记住密码,下次自动登录。 2、购物车功能。 3、记录用户浏览数据,进行商品(广告)推荐。 (4)缺陷 ①Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。 ②由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS) ③Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。 二、Session详解 (1)简介 Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。Session是一种服务器端的机制,Session 对象用来存储特定用户会话所需的信息。 Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中。

购物车系统设计与实现毕业论文

购物车模块使用说明书 配置源程序 附加SQL Server 2000数据库 (1)将DataBase文件夹中的两个文件拷贝到SQL Server 2000安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项。 (3)将弹出“附加数据库”对话框,在该对话框中单击“”按钮,选择所要附加数据库的.mdf 文件,单击“确定”按钮,即可完成数据库的附加操作。 配置IIS (1)打开“Internet 信息服务”,如图1.1所示。 图1.1 “Internet信息服务(IIS)管理器”窗口 (2)选中“网站”/“默认网站”节点,单击右键,选择“属性”,如图1.2所示。

(3)弹出“默认网站属性”窗口,选择“主目录”选项卡,如图1.3所示。 (4)单击“浏览”按钮,打开“浏览文件夹”窗口,在该窗口中选择实例路径,如图1.4所示。

图1.4 选择程序路径 (5)依次单击“确定”按钮,完成配置,选中首页文件“index.asp”,单击鼠标右键,在弹出的菜单中选择“浏览”菜单项即可。 使用说明 运行程序,打开程序主页面,如图1.5所示。要想购买商品首先需要注册用户名和密码,然后进行登录。

登录成功后,单击商品处的“购买”按钮,进入购物车页面,如图1.6所示。

图1.6 购物车页面 在这里可以修改购买数量、清空购物车、继续购物及去收银台结账等操作。单击“去收银台结账”超链接,进入填写订单页面,如图1.7所示。

深入理解Session,cookie

深入理解Servlet/JSP之“Cookie和Session原理” (2008-06-29 13:41:09) 转载 标签:it it培训 java jsp servlet session cookie session持久化 由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。 一、Cookie Cookie的含义是“服务器送给浏览器的甜点”,即服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的Cookie通过请求信息带到服务器端。 下面的Servlet展示了Cookie的功能。 ... ... ... public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String option = request.getParameter("option"); if ("show".equals(option)) { //获得请求信息中的Cookie数据 Cookie[] cookies = request.getCookies(); if (cookies != null) { //找出名称(键)为“cool”的Cookie for (int i = 0; i < cookies.length; i++) { if ("cool".equals(cookies[i].getName())) { out.println("

" + cookies[i].getName() + ":" + cookies[i].getValue() + "

"); } } } } else if ("add".equals(option)) { //创建Cookie对象 Cookie cookie = new Cookie("cool", "yeah!");

页面跳转及Cookie和Session

第十五天课堂笔记 1.页面跳转的两种方式 a)请求转发 i.实现代码: ii.特点: 1.不管转发几次, 只发送一次请求 2.请求携带的数据在转发后还可以继续获取 3.地址栏在多次转发时不会改变 4.转发后的代码还可以继续执行, 但是, 只能转发一 次 5.可以转发给项目内的资源(servlet, 界面…), 但是不 能转发到项目外的资源 b)重定向 i.实现代码 ii.特点 1.重定向一次会发送两次请求 2.因为是两次请求, 所以第一次携带的数据在第二次 请求时就已经无效了, 需要再次携带数据 3.地址栏会发生改变

4.重定向后代码还可以继续执行, 但是, 只能重定向 一次 5.重定向既可以访问内部资源, 也可以访问外部资源 2.ServletContext对象 a)一个应用程序只有一个ServletContext对象, 被所有 Servlet所共享, 因此, 该对象也被称之为Application对象 b)获取ServletContext对象的三种方式: c)ServletContext对象常用的功能 i.获取全局配置信息 1.全局配置信息的定义 2.获取全局配置信息 ii.获取相关路径信息 iii.获取WebRoot下的资源文件

iv.请求转发 3.Cookie a)Cookie是一个类, 它用于存储一些少量的信息, 首先在Servlet 中创建, 然后发送到客户端浏览器进行保存, 在之后的访问服 务器的过程中, 浏览器会自动携带Cookie信息 b)Cookie信息默认存储于浏览器内存中, 关闭浏览器或使用不同 的浏览器, 均无法获取到cookie信息 c)可以通过setMaxAge(seconds)方法给Cookie设置最大存活时间. 设置后, Cookie会保存到本地硬盘中, 到期后自动删除.如果时 间设置为0, cookie会被直接删除. d)可以通过setPath(uri)方法给Cookie设置访问路径, 设置后只有 访问固定路径时, 才会携带Cookie信息

JSP实现购物车功能

下面是我用JSP和数据库做的购物车的源程序: //shop_cart.jsp <%@ page contentType="text/html;charset=gb2312"%> <%@ page session="true" %> <%@ page language="java" import="java.sql.*" %> <jsp:useBean id="bka" scope="page" class="shop.bka" /> <% String product_type; String action; int product_id; int curpage; //商品类型 if (request.getParameter("product_type")==null){ product_type="all"; }else{ product_type=request.getParameter("product_type"); } //页数和商品类型参数,可以在“继续购物”时返回到上次购物的页面if (request.getParameter("curpage")==null){ curpage=1; }else{ curpage=https://www.360docs.net/doc/a418480181.html,ng.Integer.parseInt(request.getParameter("curpage")); } //动作 if (request.getParameter("action")==null){ action="view"; }else{ action=request.getParameter("action"); } //商品编号 if (request.getParameter("product_id")==null){ product_id=0; }else{ product_id=https://www.360docs.net/doc/a418480181.html,ng.Integer.parseInt(request.getParameter("product_id")); } int bbb; bbb=1;

利用FIDDLER工具进行session和cookie欺骗

利用FIDDLER工具进行session和cookie欺骗 Agileone登录捕获: 选中post请求,在内容中修改密码并执行。 将password=admin,改成password=123,显示结果如下: 在textview中,结果反馈为password invalid。 进行session欺骗:把登录后的任意一个请求的sessionIDcopy到登录get请求内容中,结果响应出已经进入到登录后的首页,和首页中的源文件一样。如图,

请求内容: GET http://localhost/agileone/ HTTP/1.1 Host: localhost Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8 Cookie:PHPSESSID=68aa4b8855d4e704dce53b23eb9a5c92;PHPSESSID=4766b699b16758c0ce 8eca2756a3a459; Cookie欺骗操作同理。

实训八 购物车系统的功能实现

实训八购物车系统的功能实现 一、能力目标 终极目标:能够设计制作出公司网站的购物车系统功能。 促成目标: 1.能正确设计商品展示与管理程序。 2.能正确设计购物车购物程序。 3.能正确设计购物车定单管理程序。 二、工作任务 本项目的任务是能够在ASP环境下编程实现网站前台的商品列表显示、商品详细信息显示及对商品能够实现在线订购的功能;能够实现网站后台对商品分类及商品内容的增、删、改的管理,能够对前台下的定单进行查看、状态修改及删除的管理。 一、实训任务 设计前台商品展示 任务1:使用ASP程序循环显示商品分类列表。 任务2:根据商品分类列表完成商品展示列表。 任务3:完成商品详细信息显示功能。 后台管理 任务1:设计后台管理商品分类添加、修改和删除。 任务2:设计后台商品信息的添加和修改、删除功能。 设计商品购物车程序: 任务1:制作购物车网页。 任务2:编程实现购物车购物功能。 任务3:完成商品订单的管理功能。 二、实训步骤 (一)前台显示 新建二张网页商品列表显示页面goodlist.asp,商品详细内容显示页面showgoods.asp。

任务1操作方法: 商品展示列表的效果图如图所示: 1)用dreamweaver ,创建goodlist.asp ,因为要使用ASP 代码循环输出商品列表,左边用来显示商品分类列表,页面如图如所。

2)打开网页的代码视图,在网页头部输入下列代码,如图所示 3)将网页切换到“拆分”视图,找到商品分类单元格,输入下列代码,代码分析如图所示:

任务2操作方法: 1)在对应位置继续完成商品展示循环输出的代码,代码分析如图所示: 查询商品列表 信息的SQL 语句,使用联接查询。 根据分类降序排列 分页 变量控制表格列数

对java中cookie和session的一些简介

1 课程回顾 Servlet编程 1)Servlet生命周期(重点) 构造方法:创建servlet对象。默认情况下,第一次访问servlet对象时。只调用1次。 init方法(有参):创建完servlet对象后调用。只调用1次。 注意:会调用无参的init方法。 service方法:servlet提供服务的方法。每次发出请求调用。 注意:request对象,response对象 destroy方法:tomcat服务器停止或web应用重新部署,servlet对象销毁,destroy方法被调用。 2)ServletConfig对象 获取servlet的初始化参数: getInitParameter("name "); getInitParameterNames(); 3)ServletContext对象 得到web应用路径: context.getContextPath(); request.getContextPath(); 等价于上面的代码 得到web应用参数: context.getInitParameter("name"); context.getInitParameterNames(); 域对象: context.setAttribute("name",Object): 保存数据 context.getAttribute("name") 得到数据 context.removeAttribue("name") 清除数据 转发 context.getRequestDispatcher("路径").forward(request,response); request.getRequestDispacher("路径").forward(request,response); 等价于上面的代码得到web应用中的资源文件 context.getRealPath("路径") context.getResourceAsStream("路径"); 今天的目标:会话管理 // 代表java命令运行目录,java运行命令哪里? 服务器启动的目录,tomcat/bin 到底在什么环境下运行,用.在java和entete不一样。Java和tomcat的不一样, 用这个方法, 2. 会话管得到web应用中的资源文件 context.getRealPath("路径") context.getResourceAsStream("路径");

Session四种方式测试报告(ASP&NET)

目录 https://www.360docs.net/doc/a418480181.html, Session四种方式测试报告 (1) 测试环境 (1) 简介 (1) 默认模式 (1) cookieless模式 (4) 将服务器Session信息存储在进程中 (4) 将服务器Session信息存储在数据库中 (5) 结论 (6) https://www.360docs.net/doc/a418480181.html, Session四种方式测试报告 版权归属:Top of c# 5885668群风之痕(499905171)原创文章,如果有转载,请保留该句。测试环境 .net 4.0 谷歌浏览器(34.0.1847.116) 简介 SessionState是https://www.360docs.net/doc/a418480181.html,默认的机制。SessionState有几种模式。InProc,StateServer,SqlServer模式。InProc不支持负载均衡的场景。只有StateServer和SqlServer模式才支持。自定义模式是指我们自己实现Session数据的持久化,比如将Session数据放到Oracle数据库或者MySql数据库中,自定义模式也可以支持负载均衡。在StateServer和SqlServer模式时,放入Session中的数据都必须是能序列化的。建议采用SqlServer模式的Session机制。 默认模式 默认模式下Session会在客户生成一个浏览器的cookie,跟在服务端生成一个内存对象。 因为这种原理,所以当我们清理掉浏览器的cookie,再连接的时候,服务端还会生成一个新的Session对象,如果前个Session还没释放的话,就会有2个对象产生。 下面代码会通过全局文件,去判断Session是否产生,是否释放,产生的话+1,释放-1

相关文档
最新文档