當前位置:首頁 » 網購平台 » 基於session的購物車
擴展閱讀
寧波奧德賽優惠價格 2021-03-15 14:26:02
丹尼斯購物卡能掛失么 2021-03-15 14:25:58
淘寶購物指紋驗證失敗 2021-03-15 14:24:44

基於session的購物車

發布時間: 2021-03-04 03:52:01

A. thinkphp做的session購物車,求詳細代碼。有完整例子的可以發下。非常感謝

<?php


classCartTool{
privatestatic$ins=null;
private$items=array();

finalprotectedfunction__construct(){
}

finalprotectedfunction__clone(){
}

//獲取實例
protectedstaticfunctiongetIns(){
if(!(self::$insinstanceofself)){
self::$ins=newself();
}

returnself::$ins;
}


//把購物車的單例對象放到session里
publicstaticfunctiongetCart(){
if(!isset($_SESSION['cart'])||!($_SESSION['cart']instanceofself)){
$_SESSION['cart']=self::getIns();
}

return$_SESSION['cart'];
}


/*
添加商品
paramint$id商品主鍵
paramstring$name商品名稱
paramfloat$ 商品價格
paramint$num購物數量
*/
publicfunctionaddItem($id,$name,$price,$brand,$thumb,$num=1){

if($this->hasItem($id)){//如果該商品已經存在,則直接加其數量
$this->incNum($id,$num);
return;
}

$item=array();
$item['id']=$id;
$item['name']=$name;
$item['price']=$price;
$item['brand']=$brand;
$item['thumb']=$thumb;
$item['num']=$num;

$this->items[$id]=$item;

return$this->items[$id];


}


/*
修改購物車中的商品數量
paramint$id商品主鍵
paramint$num某個商品修改後的數量,即直接把某商品的數量改為$num
*/
publicfunctionmodNum($id,$num=1){
if(!$this->hasItem($id)){
returnfalse;
}

$this->items[$id]['num']=$num;

}


/*
商品數量增加1
*/
publicfunctionincNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num']+=$num;
}
}


/*
商品數量減少1
*/
publicfunctiondecNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num']-=$num;
}

//如果減少後,數量為0了,則把這個商品從購物車刪掉
if($this->items[$id]['num']<1){
$this->delItem($id);
}
}


/*
判斷某商品是否存在
*/
publicfunctionhasItem($id){
returnarray_key_exists($id,$this->items);
}


/*
刪除商品
*/
publicfunctiondelItem($id){
unset($this->items[$id]);
}


/*
查詢購物車中商品的種類
*/
publicfunctiongetCnt(){
returncount($this->items);
}


/*
查詢購物車中商品的個數
*/
publicfunctiongetNum(){
if($this->getCnt()==0){
return0;
}

$sum=0;

foreach($this->itemsas$item){
$sum+=$item['num'];
}

return$sum;
}


/*
查詢購物車中商品的總金額
*/
publicfunctiongetPrice(){
if($this->getCnt()==0){
return0;
}

$price=0.0;

foreach($this->itemsas$item){
$price+=$item['num']*$item['price'];
}

return$price;
}/*
返回購物車中的所有商品
*/

publicfunctionall(){
return$this->items;
}

/*
清空購物車
*/
publicfunctionclear(){
$this->items=array();
}
}




以上是類文件,需要引入的。



$cart=CartTool::getCart();
$car_goods_list=$cart->all();//獲取商品列表

$goods_num=$cart->getNum();//商品個數

$goods_sum_price=$cart->getPrice();//總價格

$cart->addItem($goods_id,$goods_list['goods_name'],$goods_list['shop_price'],$goods_list['brand'],$goods_list['goods_thumb'],$num);//增加一件商品到購物車

$cart->clear();//清空購物車

B. 購物車用session怎麼實現的

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriterout=response.getWriter();
//獲得session
request.getSession();//創建了一個session

//獲得所有商品
Map<String,Book>all=DB.getAll();

out.write("本站提供如下商品<br>");
for(Entry<String,Book>e:all.entrySet()){
Bookbook=e.getValue();
//超鏈接要url重寫
//url重寫做了兩件事情,第一,獲得session的id,第二,將id加到地址後面
Stringurl="/javaweb07/servlet/BuyServlet?id="+book.getId();
StringnewUrl=response.encodeURL(url);
out.write(book.getName()+"<ahref='"+newUrl+"'target='_blank'>購買</a><br>");
}
}

BuyServlet.java
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//獲得id
Stringid=request.getParameter("id");

//找出書
Bookbook=DB.find(id);

//獲得購物車
HttpSessionsession=request.getSession();
Listcart=(List)session.getAttribute("cart");
if(cart==null){
//剛進超市,分配購物車
cart=newArrayList();
}

//加入購物車
cart.add(book);

//將購物車找個地方存起來,方便下次購買
session.setAttribute("cart",cart);

//第一次創建session的時候需要發Cookie,將sessionid帶給瀏覽器

//獲得sessionid
Stringsessionid=session.getId();
//發送cookie,Cookie的key是區分大小寫
Cookiecookie=newCookie("JSESSIONID",sessionid);
//設置有效時間
cookie.setMaxAge(60*60*5);
response.addCookie(cookie);

//請求重定向到購物車頁面
Stringurl="/javaweb07/servlet/ListCartServlet";
//url重寫
StringnewUrl=response.encodeRedirectURL(url);

response.sendRedirect(newUrl);
}

ListCarServlet
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=utf-8");
PrintWriterout=response.getWriter();

//獲取購物車
//getSession方法會拿著用戶的jsessionid去內存找session找不到才創建
HttpSessionsession=request.getSession();

List<Book>cart=(List<Book>)session.getAttribute("cart");

if(cart==null){
out.write("對不起!您還沒有購買商品!!!");
return;
}

//遍歷購物車中的商品顯示
out.write("您購買了如下商品:<br>");

for(Bookbook:cart){
out.write(book.getName()+","+book.getPrice()+"<br>");
}
//讓session立即失效
//session.invalidate();
out.write("<inputtype='button'value='進入結算中心'/>");
}

C. 解釋購物車一例的session技術的應用原理

主要的技術原理就是通過一個進行指向性的選擇,然後實現購物車的功能。

D. 實現購物車(保存到session和資料庫)

錯了。SESSION也是伺服器的,COOKIE才是客戶機上的。保存在資料庫上吧。安全些

E. session+cookies實現購物車功能,javaweb開發

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'shop2.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">

</head>

<body>

<%
request.setCharacterEncoding("UTF-8");
Map<String,Integer> itm=(Map<String,Integer>)session.getAttribute("item");
if(itm==null){
itm=new HashMap<String,Integer>();
itm.put("電視", 1);
itm.put("蘋果", 0);
itm.put("香蕉", 1);
itm.put("衣服", 0);
}
String [] buy=request.getParameterValues("c");
for(String b:buy){
if(b.equals("電視")){
int num=itm.get("電視");
itm.put(b, num+1);
}
if(b.equals("蘋果")){
int num=itm.get(b);
itm.put(b, num+1);
}
if(b.equals("香蕉")){
int num=itm.get(b);
itm.put(b, num+1);
}
if(b.equals("衣服")){
int num=itm.get(b);
itm.put(b, num+1);
}
}
session.setAttribute("item", itm);
%>
你所購買的物品<br>
電視:<%=itm.get("電視") %>本<br>
蘋果:<%=itm.get("蘋果") %>個<br>
香蕉:<%=itm.get("香蕉") %>個<br>
衣服:<%=itm.get("衣服") %>件<br>
<p><a href="shop.jsp">再次購買</a></p>
</body>
</html>

下面是購買頁面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'shop.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
歡迎光臨本店! <br>
<form action="shop2.jsp" method="post">
<input name="c" type="checkbox" value="電視" />電視
<input name="c" type="checkbox" value="蘋果" />蘋果
<input name="c" type="checkbox" value="香蕉" />香蕉
<input name="c" type="checkbox" value="衣服" />衣服
<img alt="dddd" src="<%=request.getAttribute("path")%>">
<p> <%=request.getAttribute("yy")%></p>
<input name="" type="submit" value="確認購買" />
</form>
</body>
</html>
下面是使用cookie的

添加Cookie
Cookie uname1=new Cookie("lname",username);
uname1.setMaxAge(24*3600);
Cookie upwd1=new Cookie("lpwd",pwd);
upwd1.setMaxAge(24*3600);
response.addCookie(uname1);
response.addCookie(upwd1);

添加session
session.setAttribute("log_name", username);
以下代碼是對cookie和session的數據操作!
<%
String uname="";
String upwd="";
Cookie[] cookies=request.getCookies(); //一request獲范圍獲取一個
cookie實例
if(cookies!=null){
for(Cookie c: cookies){
if("lname".equals(c.getName())){ //判斷cookie裡面的名字是否等於這

uname=c.getValue(); //如果等於就獲取它的值
}
if("lpwd".equals(c.getName())){
upwd=c.getValue();
}
}
String sql2="select * from member where username='"+uname+"'";
ResultSet rs2=null;
rs2=DBHelper.executeQuery(sql2);
boolean is=true;
while(rs2.next()){
String pp=rs2.getString("upwd");
if(pp.equals(upwd)){
is=false;
}
}
if(session.getAttribute("log_name")!=null){ //判斷是否有slog_name這
個session
uname=(String)session.getAttribute("log_name");
is=false;
}
if(is){
response.sendRedirect("index1.jsp");
}
}
%>
<%
application.setAttribute("log", uname);
%>

F. 我要用SSH做一網上購物系統,請問裡面的購物車怎樣用session做那個購物車呢

Session.add(key,value)
value可以復為制object類型
比如購物車,你可以先定義一個購物車的實體類
public class Buy
{
public proctID {get; set;}
public proctName{get; set;}
..............
}
然後建立List<Buy> buyList
再Session.add("Buy", buyList)
這樣就可以了

G. 為什麼說用session對象來表示電子商務中的購物車

一般來說購物車信息是存放在Session中的, 因為Session 便於管理. Session 不是在用戶的電腦里的, 它是一次會話內, 所以是暫存在伺服器上的容.(是否是在JVM中我不敢肯定, 好像實例化出來的對象和數據都是存放在JVM, 僅供參考)

Session 的性能不用擔心, 因為是伺服器和一個客戶端之間的會話, 而且購物車中的內容不會太多, 所以不會影響到伺服器的性能.

用Session做購物車有一點不好, 除非你Session有效期設置的很長, 否則的話, 用戶在操作過程中, 一旦Session 超時, 購物車中的東西就會全部丟失.

提供者:高山流水
網路空間:http://hi..com/ww715519816/home

如有其它問題可以到空間留言咨詢,或者網路知道直接提問。

H. 在做一個java web項目使用session保持購物車信息。

session表示當前會話,也就是說瀏覽關閉之後它就沒有了,切換用戶也會沒有,最好保存在資料庫中

I. jsp 中session的購物車問題

display.jsp 幫你修改了一下,有個小錯誤,見注釋:

<%@page language="java" contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>購物車</title>
</head>
<body>
<center>
您選購的商品
</center>
<br>
<hr>
<%
Integer itemCount = (Integer) session.getAttribute("itemCount");
if (itemCount == null) {
itemCount = new Integer(0);
}
%>
<%
String[] item = { "籃球", "足球", "乒乓球", "地球", "電腦", "電視機", "寶馬",
"法拉利", };
String[] itemsSelected = request.getParameterValues("item");
String itemName = "";
if (itemsSelected != null) {
for (int i = 0; i < itemsSelected.length; i++) {
itemName = itemsSelected[i];
session.setAttribute("item" + itemCount, itemName);
session.setAttribute("itemCount", itemCount);
//itemCount++這句應該放在這里,不然session.getAttribute("item0")==null
//你對比一下原來的代碼就知道為什麼getAttribute("item0")是null了
itemCount = new Integer(itemCount.intValue() + 1);
}
}
%>
<%
for (int i = 0; i < itemCount.intValue(); i++) {
String items = (String) session.getAttribute("item" + i);
int ite = 0;
out.println(items + " ");
ite = Integer.parseInt(items);
out.println(item[ite] + "<br>");
}
%>
</body>
</html>

J. 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
%>

提供一些方法。