❶ ASP.NET中如何用session来实现购物车的功能
Session 对象用于存储用户的信息。存储于 session 对象中的变量持有单一用户的信息,并且对于一个应用程序中的所有页面都是可用的。
Session 对象
当您操作某个应用程序时,您打开它,做些改变,然后将它关闭。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。但是在因特网上有一个问题:由于 HTTP 地址无法存留状态,web 服务器并不知道您是谁以及您做了什么。
ASP 通过为每位用户创建一个唯一的 cookie 的方式解决了这个问题。cookie 被传送至客户端,它含有可识别用户的信息。这种接口被称作 Session 对象。
Session 对象用于存储关于用户的信息,或者为一个用户的 session 更改设置。存储于 session 对象中的变量存有单一用户的信息,并且对于应用程序中的所有页面都是可用的。存储于 session 对象中的信息通常是 name、id 以及参数。服务器会为每个新的用户创建一个新的 Session,并在 session 到期时撤销掉这个 Session 对象。
Session 何时开始?
Session 开始于:
•当某个新用户请求了一个 ASP 文件,并且 Global.asa 文件引用了 Session_OnStart 子程序时;
•当某个值存储在 Session 变量中时;
•当某个用户请求了一个 ASP 文件,并且 Global.asa 使用 <object> 标签通过 session 的 scope 来例示某个对象时;
Session 何时结束?
假如用户没有在规定的时间内在应用程序中请求或者刷新页面,session 就会结束。默认值为 20 分钟。
如果您希望将超时的时间间隔设置得更长或更短,可以设置 Timeout 属性。
下面的例子设置了 5 分钟的超时时间间隔:
<%
Session.Timeout=5
%>要立即结束 session,可使用 Abandon 方法:
<%
Session.Abandon
%>注意:使用 session 时主要的问题是它们该在何时结束。我们不会知道用户最近的请求是否是最后的请求。因此我们不清楚该让 session“ 存活”多久。为某个空闲的 session 等待太久会耗尽服务器的资源。然而假如 session 被过早地删除,那么用户就不得不一遍又一遍地重新开始,这是因为服务器已经删除了所有的信息。寻找合适的超时间隔时间是很困难的。
提示:如果您正在使用 session 变量,请不要在其中存储大量的数据。
存储和取回 session 变量
Session 对象最大的优点是可在其中存储变量,以供后续的网页读取,其应用范围是很广的。
下面的例子把 "Donald Duck" 赋值给名为 username 的 session 变量,并把 "50" 赋值给名为 age 的 session 变量:
<%
Session("username")="Donald Duck"
Session("age")=50
%>一旦值被存入 session 变量,它就能被 ASP 应用程序中的任何页面使用:
Welcome <%Response.Write(Session("username"))%>上面这行程序返回的结果是: "Welcome Donald Duck"。
也可以在 session 对象中保存用户参数,然后通过访问这些参数来决定向用户返回什么页面。
下面的例子规定,假如用户使用低显示器分辨率,则返回纯文本版本的页面:
<%If Session("screenres")="low" Then%>
This is the text version of the page
<%Else%>
This is the multimedia version of the page
<%End If%>移除 session 变量
contents 集合包含所有的 session 变量。
可通过 remove 方法来移除 session 变量。
在下面的例子中,假如 session 变量 "age" 的值小于 18,则移除 session 变量 "sale":
<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>如需移除 session 中的所有变量,请使用 RemoveAll 方法:
<%
Session.Contents.RemoveAll()
%>遍历 contents 集合
contents 集合包含所有的 session 变量。可通过遍历 contents 集合,来查看其中存储的变量:
<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
Response.Write(i & "<br />")
Next
%>结果:
username
age如果需要了解 contents 集合中的项目数量,可使用 count 属性:
<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
Response.Write(Session.Contents(i) & "<br />")
Next
%>结果:
Session variables: 2
Donald Duck
50遍历 StaticObjects 集合
可通过循环 StaticObjects 集合,来查看存储在 session 对象中所有对象的值:
<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br />")
Next
%>
提供一些方法。
❷ 求ASP.NET购物车实现代码,用SESSION实现的那种
这个是我自己写的代码,希望对你有帮助: public void GetBuyShop(int shopId)
{
//获取当前点击的商品信息
Shop shop = ShopManager.GetShopByShopId(shopId);
//获取购物车
Dictionary<string, ShopItem> cart = Session["cart"] as Dictionary<string, ShopItem>;
//判断购物车是否存在
if (cart == null)
{
cart = new Dictionary<string, ShopItem>();
} ShopItem shopitem = null;
//判断当前添加的商品在购物车中是否村
foreach (string str in cart.Keys)
{
//如果相等,表示存在
if (str == shop.ShopName)
{
shopitem = cart[str];
}
} //如果为null,表示当前添加的商品早购物车中是不存在的
if (shopitem == null)
{
cart.Add(shop.ShopName, new ShopItem(shop, 1));
}
else
{
shopitem.Count = shopitem.Count + 1;
} Session["cart"] = cart;
Response.Redirect("~/Cart.aspx");
}
❸ ASP.NET中用session实现了购物车的功能,怎么把购物车中的数据插入到数据库的ShopCart表中购物车如下图
你把session中数据取出来,在存啊,你这个页面都已经把session数据读出来了,你读出来的同时在往数据库插入数据不就OK了?
❹ asp.net 用cookie做个购物车,怎么做
/// <summary>
/// 购买
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void imgb_Buy_Click(object sender, ImageClickEventArgs e)
{
if (Session["CurrentUser"] != null)
{
if (Session["Cart"] == null)
{
this.BuildCart();
}
else
{
DataTable cart = Session["Cart"] as DataTable;
if (this.ExistBook(cart))
{
this.BuildSession(cart);
}
}
Response.Redirect("Cart.aspx");
}
else
{
Response.Redirect(@"Membership\UserLogin.aspx");
}
}
/// <summary>
/// 已有图书
/// </summary>
/// <param name="cart"></param>
/// <returns></returns>
public bool ExistBook(DataTable cart)
{
foreach (DataRow dr in cart.Rows)
{
if (dr["BookName"].ToString().Equals(this.lblBookName.Text.Trim()))
{
dr["Number"] = Convert.ToInt32(dr["Number"]) + 1;
Session["Cart"] = cart;
Response.Redirect("Cart.aspx");
}
}
return true;
}
/// <summary>
/// 新建购物车表
/// </summary>
public void BuildCart()
{
DataTable cart = new DataTable();
cart.Columns.Add("BookId");
cart.Columns.Add("BookName");
cart.Columns.Add("Number");
cart.Columns.Add("UnitPrice");
cart.Columns.Add("ImageUrl");
this.BuildSession(cart);
}
/// <summary>
/// 添加新书
/// </summary>
/// <param name="cart"></param>
public void BuildSession(DataTable cart)
{
DataRow dr = cart.NewRow();
dr["BookId"] = ViewState["BookId"].ToString();
dr["BookName"] = this.lblBookName.Text.Trim();
dr["Number"] = "1";
dr["UnitPrice"] = this.lblPrice.Text.Substring(0, this.lblPrice.Text.Length - 1); ;
dr["ImageUrl"] = this.lblISBN.Text.Trim();
cart.Rows.Add(dr);
Session["Cart"] = cart;
}
❺ ASP.NET session 版购物车,哪位大侠帮忙写一下
首先,LZ需要一个计算逻辑的类,下面是代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections;
using System.Collections.Generic;
namespace siteadmin
{
[Serializable]
public class CartItem
{
private int _proctID;
private string _proctName;
private int _quantity;
private decimal _price;
private decimal _lineTotal;
public int ProctID
{
get { return _proctID; }
set { _proctID = value; }
}
public string ProctName
{
get { return _proctName; }
set { _proctName = value; }
}
public int Quantity
{
get { return _quantity; }
set { _quantity = value; }
}
public decimal Price
{
get { return _price; }
set { _price = value; }
}
public decimal LineTotal
{
get { return _quantity * _price; }
}
public void New(int proctID, string proctName, int quantity, decimal price)
{
_proctID = proctID;
_proctName = proctName;
_quantity = quantity;
_price = price;
_lineTotal = Quantity * Price;
}
}
public class ShoppingCart
{
private DateTime _dateCreated;
private DateTime _lastUpdate;
private List<CartItem> _items;
public List<CartItem> Items
{
get { return _items; }
set { _items = value; }
}
public decimal Total
{
get
{
decimal t = 0;
if (_items == null)
{
return 0;
}
foreach (CartItem item in _items)
{
t += item.LineTotal;
}
return t;
}
}
public ShoppingCart()
{
if (this._items == null)
{
this._items = new List<CartItem>();
this._dateCreated = DateTime.Now;
}
}
public void Insert(int proctID, decimal price, int quantity, string proctName)
{
int itemIndex = ItemIndexOfID(proctID);
if (itemIndex == -1)
{
CartItem newItem = new CartItem();
newItem.ProctID = proctID;
newItem.Quantity = quantity;
newItem.Price = price;
newItem.ProctName = proctName;
_items.Add(newItem);
}
else
{
_items[itemIndex].Quantity += quantity;
}
_lastUpdate = DateTime.Now;
}
public void Update(int rowID, int quantity)
{
CartItem item = _items[rowID];
item.Quantity = quantity;
_lastUpdate = DateTime.Now;
}
public void DeleteItem(int rowID)
{
_items.RemoveAt(rowID);
_lastUpdate = DateTime.Now;
}
private int ItemIndexOfID(int proctID)
{
int index = 0;
foreach (CartItem item in _items)
{
if (item.ProctID == proctID)
{
return index;
}
index += 1;
}
return -1;
}
}
}
接下来,LZ需要用session持久化数据
入添加商品,我们假设从请求页读取到操作addcart
if(Request["topp"]=="addcart")
{
string pdtid=Request["pdtid"];
if(!YTLib.publicOP.IsNumString(pdtid)||pdtid==null)
pdtid="0";
if(pdtid=="0")
{
Response.Write("<script language=\"javascript\">alert(\"You add the proct is wrong!\");window.location.href=\"" + pageno + "\"</script>");
return;
}
string quantity=Request["quantity"+pdtid];
if(!YTLib.publicOP.IsNumString(quantity)||quantity==null||quantity.Length==0)
quantity="1";
DataTable dtpdt=siteadmin.Utilities.GetPdtDetailById(int.Parse(pdtid));
int proctId=int.Parse(pdtid);
string price=dtpdt.Rows[0]["PdtPrice"].ToString();
string proctName=dtpdt.Rows[0]["PdtTitle"].ToString();
if(Session["cart"]==null)
Session["cart"]=new ShoppingCart();
ShoppingCart cart = (ShoppingCart)Session["cart"];
cart.Insert(proctId,Convert.ToDecimal(price), int.Parse(quantity), proctName);
Response.Write("<script language=\"javascript\">alert(\"Proct successfully added!\");window.location.href=\"" + pageno + "\"</script>");
}
❻ 请问asp.net做购物车的时候 用session还是cookie还是用全局变量
看你做的购物车是保存在客户端的内存中
还是保存在数据库中啊
如果是专保存在内存中,就用属cookie好一些,因为 如果保存在session中,会暂用服务器资源,
如果保存在数据库中,那就更好办了,添加一次到购物车就执行操作数据库一次
❼ ASP.NET中用session实现了购物车的功能,接下去怎么弄怎么结算提交订单啊 求大神帮忙啊!!!
现在就是把你购物车中的数据提交到数据库,保存在数据库中的订单的相关数据表中!
❽ ASP.NET+SQL Server +Session+购物车
在事物未处理完,不能立即更改真实表数据。
要做临时表。
兄弟认真想下。换思路来做。
未结束更新数据这个是万万不能的。
❾ asp.net中用session保存购物车数据问题
你好:
1.你可能在Page_Load中没有做
if(!this.IsPostBack)
{
}
判断,建议你把你的从session中读取值,来绑定数据的过程,放在这个判断里执行.
2.使用Application是肯定不可以的,因为Application里存的是全部用户都能访问的数据,购物车,应该是不同用户有不同数据.