cookie購物車價格出錯
『壹』 用php結合cookie實現購物車的一些問題
URL傳遞的參數可以在連接後的程序中直接使用,如:
<a href="zancunjia.php?a1=YF0001&b1=500&c1=8888&d1=YF0001.html ">鏈接1</a><br/>
zancunjia.php中可以用$a1來的到a1,類推……
COOKIE可以使用setcookie()函數設置!
使用已設置的COOKIE是用全局變數:$_COOKIE['***']!***是所設置的鍵值……
如果是購物車,我舉得不應該使用cookie來保存信息,而是要用session,這樣比較好一些!
『貳』 cookie怎麼實現實現購物車
目前購物車的實現主要是通過cookie、session或結合資料庫的方式。下面分析一下它們的機制及作用。
1. cookie
cookie是由伺服器產生,存儲在客戶端的一段信息。它定義了一種Web伺服器在客戶端存儲和返回信息的機制,cookie文件它包含域、路徑、生存期、和由伺服器設置的變數值等內容。當用戶以後訪問同一個Web伺服器時,瀏覽器會把cookie原樣發送給伺服器。通過讓伺服器讀取原先保存到客戶端的信息,網站能夠為瀏覽者提供一系列的方便,例如在線交易過程中標識用戶身份、安全要求不高的場合避免用戶重復輸入名字和密碼、門戶網站的主頁定製、有針對性地投放廣告等等。利用cookie的特性,大大擴展了WEB應用程序的功能,不僅可以建立伺服器與客戶機的聯系,因為cookie可以由伺服器定製,因此還可以將購物信息生成cookie值存放在客戶端,從而實現購物車的功能。用基於cookie的方式實現伺服器與瀏覽器之間的會話或購物車,有以下特點:
n cookie存儲在客戶端,且佔用很少的資源,瀏覽器允許存放300個cookie,每個cookie的大小為4KB,足以滿足購物車的要求,同時也減輕了伺服器的負荷;
n cookie為瀏覽器所內置,使用方便。即使用戶不小心關閉了瀏覽器窗口,只要在cookie定義的有效期內,購物車中的信息也不會丟失;
n cookie不是可執行文件,所以不會以任何方式執行,因此也不會帶來病毒或攻擊用戶的系統;
n 基於cookie的購物車要求用戶瀏覽器必須支持並設置為啟用cookie,否則購物車則失效;
n 存在著關於cookie侵犯訪問者隱私權的爭論,因此有些用戶會禁止本機的cookie功能。
2. session
session是實現購物車的另一種方法。session提供了可以保存和跟蹤用戶的狀態信息的功能,使當前用戶在session中定義的變數和對象能在頁面之間共享,但是不能為應用中其他用戶所訪問,它與cookie最重大的區別是,session將用戶在會話期間的私有信息存儲在伺服器端,提高了安全性。在伺服器生成session後,客戶端會生成一個sessionid識別號保存在客戶端,以保持和伺服器的同步。這個sessionid是只讀的,如果客戶端禁止cookie功能,session會通過在URL中附加參數,或隱含在表單中提交等其他方式在頁面間傳送。因此利用session實施對用戶的管理則更為安全、有效。
同樣,利用session也能實現購物車,這種方式的特點是:
n session用新的機制保持與客戶端的同步,不依賴於客戶端設置;
n 與cookie相比,session是存儲在伺服器端的信息,因此顯得更為安全,因此可將身份標示,購物等信息存儲在session中;
n session會佔用伺服器資源,加大伺服器端的負載,尤其當並發用戶很多時,會生成大量的session,影響伺服器的性能;
n 因為session存儲的信息更敏感,而且是以文件形式保存在伺服器中,因此仍然存在著安全隱患。
3. 結合資料庫的方式
這也是目前較普遍的模式,在這種方式中,資料庫承擔著存儲購物信息的作用,session或cookie則用來跟蹤用戶。這種方式具有以下特點:
n 資料庫與cookie分別負責記錄數據和維持會話,能發揮各自的優勢,使安全性和伺服器性能都得到了提高;
n 每一個購物的行為,都要直接建立與資料庫的連接,直至對表的操作完成後,連接才釋放。當並發用戶很多時,會影響資料庫的性能,因此,這對資料庫的性能提出了更高的要求;
n 使cookie維持會話有賴客戶端的支持。
各種方式的選擇:
雖然cookie可用來實現購物車,但必須獲得瀏覽器的支持,再加上它是存儲在客戶端的信息,極易被獲取,所以這也限制了它存儲更多,更重要的信息。所以一般cookie只用來維持與伺服器的會話,例如國內最大的當當網路書店就是用cookie保持與客戶的聯系,但是這種方式最大的缺點是如果客戶端不支持 cookie就會使購物車失效。
Session 能很好地與交易雙方保持會話,可以忽視客戶端的設置。在購物車技術中得到了廣泛的應用。但session的文件屬性使其仍然留有安全隱患。
結合資料庫的方式雖然在一定程度上解決了上述的問題,但從上面的例子可以看出:在這種購物流程中涉及到對資料庫表的頻繁操作,尤其是用戶每選購一次商品,都要與資料庫進行連接,當用戶很多的時候就加大了伺服器與資料庫的負荷
這裡面說的確實很詳細
我們公司採用的是資料庫的方式
1、用戶瀏覽系統,獲取用戶機器的MAC地址
2、如果用戶購買物品,添加到資料庫裡面,同時插入機器的MAC地址,也是用戶的ID標示
3、如果用戶登錄系統,用用戶真實的ID,更新當前機器的MAC對應的記錄。
4、如果結帳的話,更新用戶的id,刪除購物車裡面的東西
5、用戶沒有登錄,購物車記錄根據MAC讀取記錄,如果登錄系統根據用戶的ID,讀取記錄
『叄』 購物車程序問題(asp+js+cookie)
以下是貼上來的,我以前也過的。我可以打包發給你。留言給我告訴我郵箱
cookie_buy.asp源代碼
<%session("username")="Inghot"%>
<p>
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','111','蘋果1','1',11)" />
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','222','蘋果2','1',12)" />
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','333','蘋果3','1',13)" />
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','444','蘋果4','1',14)" />
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','555','蘋果5','1',15)" />
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','666','蘋果6','1',16)" />
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','777','蘋果7','1',17)" />
<input type="image" src="image/buy.gif" name="Submit" value="購買" title="購買" onClick="writeCookie('<%=session("username")%>','888','蘋果8','1',18)" />
</p>
<p><a href="cookie_show.asp">去埋單</a></p>
<p style="text-align:center;">Copyright <a href="http://inghot.cn" target="_blank">Inghot.cn</a></p>
<script language="javascript">
//document.cookie="<%'=session("username")%>"+"=";//清空cookie
//writeCookie("cookie名稱","產品ID","產品名稱","產品數量",價格)
function writeCookie(name, ID, pro, num, pri)
{
var test=false;
var values="," + escape(ID) + "#" + escape(pro) + "#" + escape(num) + "#" + escape(pri);
var cookieValue = readCookie(name);
sss=cookieValue.split(",")
for (i=0;i<sss.length;i++){
s=sss[i].split("#");
for(j=0;j<s.length;j++){
if(s[0]==ID)
{
cookieValue=cookieValue.replace(","+sss[i],"");
nums=s[2];
test=true;
alert('你已經購買過些物品,將只在數量上添加!');
break;
}
}
}
if (test)
{
document.cookie = name + "=" + cookieValue+ "," + escape(ID) + "#" + escape(pro) + "#" + escape(parseInt(num)+parseInt(nums)) + "#" + escape(pri);
test=false;
}
else
{
document.cookie = name + "=" + cookieValue+values;
alert ('購買成功');
}
}
function readCookie(name)
{
var cookieValue = "";
var search = name + "=";
if(document.cookie.length > 0)
{
offset = document.cookie.indexOf(search);
if (offset != -1)
{
offset += search.length;
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
cookieValue = document.cookie.substring(offset, end)
}
}
return cookieValue;
}
</script>
cookie_shop.asp源代碼
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>你的所購的物品</title>
<style type="text/css">
body {font-size:13px;}
.tb_b {border-bottom-width: 1px;border-bottom-style: dotted;border-bottom-color: #00A600;}
.tb_t {border-bottom-width: 1px;border-bottom-style: dotted;border-bottom-color: #00A600;}
.tb_tb {border-bottom-width: 1px;border-bottom-style: dotted;border-bottom-color: #00A600;border-top-width: 1px;border-top-style: dotted;border-top-color: #00A600;}
.tb_tbl {border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-top-style: dotted;border-bottom-style: dotted;border-left-style: dotted;border-top-color: #00A600;border-bottom-color: #00A600;border-left-color: #00A600;}
.tb_bl {border-bottom-width: 1px;border-left-width: 1px;border-bottom-style: dotted;border-left-style: dotted;border-bottom-color: #00a600;border-left-color: #00a600;}
</style>
<script language="javascript">
<!--//
//name購物車名稱
function readCookie(name)
{
var cookieValue = "";
var search = name + "=";
if(document.cookie.length > 0)
{
offset = document.cookie.indexOf(search);
if (offset != -1)
{
offset += search.length;
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
cookieValue = document.cookie.substring(offset, end)
}
}
return cookieValue;
}//readCookie(name) 此函數為返回已購買的所有內容,包括 物品ID,物品單價,物品名稱,物品數量
function stringToInteger (inputString)
{
return parseInt(inputString);
}//stringToInteger(inputString) 返回由字元串(inputString)轉換所得到的整數
function isNotaNumber (inputString)
{
return isNaN(inputString);
}//isNotaNumber(inputString) 返回一個 Boolean 值,指明inputString是否是保留值NaN(不是數字)
function UpdateCookie(name,Ids)
{
var buy_num=document.getElementById(Ids);
value=buy_num.value;
s=value.split("#");
value=escape(s[0])+"#"+escape(s[1])+"#"+escape(s[2])+"#"+escape(s[3])
var vvv="";
vvv=readCookie(name);//返回所有購買的內容
vvv=vvv.replace(','+value,"");//把要刪除的內容和其前面的","一起置空
document.cookie = name + "=" + vvv;//再把新的內容寫入cookie裡面
}//UpdateCookie(name, value) 刪除value這個內容
function ModifyCookie(name, valuex, ID, pro, num, pri)
{
var vvv="";
vvv=readCookie(name);//返回購買的所有內容,包括 物品ID,物品名稱,物品數量,物品單價
s=valuex.split("#");
valuex=escape(s[0])+"#"+escape(s[1])+"#"+escape(s[2])+"#"+escape(s[3])
vvv=vvv.replace(','+valuex,"");//把要修改的內容去掉
document.cookie = name + "=" + vvv + "," + escape(ID) + "#" + escape(pro) + "#" + escape(num) + "#" + escape(pri);//加上修改後得到的內容
//location.reload();
location.href='?';
}//ModifyCookie(name, valuex, ID, pro, num, pri) 修改內容,valuex為修改前的內容,value1-value4為修改後的內容
function clears()
{
document.cookie="<%=session("username")%>"+"=";
window.location.href='cookie_show.asp';
}//清除COOKIE
function AllPrice(num)
{
var All=document.getElementById("all");
All.innerHTML=num;
}//顯示價格
//-->
</script>
</head>
<body>
<table width="800" border="1" align="center" cellpadding="0" cellspacing="0" bordercolorlight="#00A600" bordercolordark="#FFFFFF">
<form name="buyForm" action="result.asp" method="post" target="_self">
<tr>
<td align="center"><img src="image/title_ico_01.gif" alt="購物車" width="165" height="68" /></td>
</tr>
<tr>
<td height="25"><img src="image/Buy_ico.gif" width="26" height="17" /> 所有商品總價 <span id="all" style="color:#FF0000;"></span>元 <span style="cursor:hand;" onClick="clears();">清空購物車</span>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="4%" height="25" align="center" class="tb_tb">序號</td>
<td width="44%" align="center" class="tb_tbl">物品名稱</td>
<td width="12%" align="center" class="tb_tbl">物品數量</td>
<td width="15%" align="center" class="tb_tbl">物品單價/元</td>
<td width="16%" align="center" class="tb_tbl">物品總價/元</td>
<td width="9%" align="center" class="tb_tbl">操作</td>
</tr>
<%
if session("username")<>"" then
buylist=request.Cookies(session("username"))'返回name為session("username")的cookie的內容
buylist_v=split(buylist,",")'用","把他們分開
for x=1 to ubound(buylist_v)'ubound 返回在buylist_v數組最大的維數,VBS數組下標為0(開始)
buylist_v_v=split(buylist_v(x),"#")'buylist_v_v為第一組數,即第x次購物的內容
buylist_v_x=buylist_v(x)'buylist_v_x為第x次購物的內容,與buylist_v(x)同
if buylist_v(x)<>"" then'判斷第x購物內容是否為空
if(ubound(buylist_v_v))<3 then
response.write("<script>alert('出現錯誤');document.cookie="""&session("username")&"""+"""=""";location.href='?';</script>")
response.End()
end if
ProID=buylist_v_v(0)'有四個內容讀四次,這個為 物品ID
ProName=buylist_v_v(1)'這個為 物品名稱
ProNum=buylist_v_v(2)'這個為 物品數量
ProPrice=buylist_v_v(3)'這個為 物品單價
AllPrice=AllPrice + (ProNum*ProPrice)
%>
<tr onMouseOver="this.style.backgroundColor='#F0FFEC'" onMouseOut="this.style.backgroundColor=''">
<td height="25" align="center" class="tb_b"><%=x%>
<input type="hidden" name="ID_<%=x%>" id="ID_<%=x%>" value="<%=ProID%>" /></td>
<td align="center" class="tb_bl"> <%=ProName%>
<input type="hidden" name="buy_<%=x%>" id="buy_<%=x%>" value="<%=buylist_v(x)%>" /></td>
<td align="center" class="tb_bl"><input name="num_<%=x%>" type="text" onChange="if(isNotaNumber(this.value)==true){alert('請輸入整數數字');this.value=1;}else{this.value=stringToInteger(this.value);};ModifyCookie('<%=session("username")%>','<%=buylist_v(x)%>','<%=ProID%>','<%=ProName%>',this.value,'<%=ProPrice%>');" value="<%=ProNum%>" size="10" maxlength="5" /></td>
<td align="center" class="tb_bl"> <%=ProPrice%>
<input type="hidden" name="pri_<%=x%>" id="pri_<%=x%>" value="<%=ProPrice%>" /></td>
<td align="center" class="tb_bl"> <%=ProPrice*ProNum%></td>
<td align="center" class="tb_bl"><img src="image/quit.gif" width="48" height="20" id="quit" name="quit" value="放棄" onClick="UpdateCookie('<%=session("username")%>','buy_<%=x%>');location.href='?';" /></td>
</tr>
<%
end if
next
response.write("<script>AllPrice('"&AllPrice&"');</script>")
end if
%>
</table>
</td>
</tr>
<tr>
<td height="25" align="center" style="display:block; vertical-align:middle;"><input type="image" value="提交" src="image/okay.gif" width="60" height="25" /> <img src="image/cancel.gif" width="60" height="25" border="0" title="取消" onClick="clears();" /></td>
</tr>
</form>
</table>
<p><a href="cookie_buy.asp">返回購物</a></p>
<p style="text-align:center;">Copyright <a href="http://inghot.cn" target="_blank">Inghot.cn</a></p>
</body>
</html>
result.asp源代碼
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>結果</title>
</head>
<body>
<p>
<%
nums=request.Form.count
price=0
id=""
num=""
'循環讀出提交過來的物品ID和數量,價格
'for i=1 to int(nums/3)
' id =id & request.Form("ID_"&i) & "|"
' num =num & request.Form("num_"&i) & "|"
' pri = pri & request.Form("pri_"&i) & "|"
'next
'response.write(id&"@"&num&"@"&pri&"<br />")
'當然一般價格是不會到這里得到的,所以取了個ID過來..這樣再根據ID去庫里取價格了
for i=1 to int(nums)
id = request.Form("ID_"&i)
num = request.Form("num_"&i)
pri = request.Form("pri_"&i)
price=price+(pri*num)
next
response.write("總共:"&price&"元")
%>
</p>
<p><a href="cookie_buy.asp">返回購物</a> <a href="cookie_show.asp">返回結算</a></p>
<p style="text-align:center;">Copyright <a href="http://inghot.cn" target="_blank">Inghot.cn</a></p>
</body>
</html>
『肆』 如果購物車cookie被禁用了怎麼辦
Cookie與 Session,一般認為是兩個獨立的東西,Session採用的是在伺服器端保持狀態的方案,而Cookie採用的是在客戶端保持狀態的方案。但為什麼禁用Cookie就不能得到Session呢?因為Session是用Session ID來確定當前對話所對應的伺服器Session,而Session ID是通過Cookie來傳遞的,禁用Cookie相當於失去了Session ID,也就得不到Session了。
如何禁用cookie?
1、啟動IE;
2、在「工具」菜單上,單擊「Internet選項」,打開「Internet選項」對話框;
3、單擊「隱私」選項卡,將滑塊上移到更高的隱私級別。如果移動到最頂端則是選擇「阻止所有的Cookie」,此時系統將阻止所有網站的Cookie,而且網站不能讀取計算機上已有的Cookie;
4、單擊「確定」按鈕。
sessionid是存儲在cookie中的,解決方案如下:
Session URL重寫,保證在客戶端禁用或不支持COOKIE時,仍然可以使用Session
session機制。session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
當程序需要為某個客戶端的請求創建一個session時,伺服器首先檢查這個客戶端的請求里是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字元串,這個session id將被在本次響應中返回給客戶端保存。 保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給伺服器。一般這個cookie的名字都是類似於 SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回伺服器。 經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面。還有一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞回伺服器。
『伍』 淘寶購物車不能結算,結算圖標是灰色的,已經好幾天了,換瀏覽器刪除COOKIe都不行,淘寶客服也解決不了
建議先用別人電腦登陸看看,如果可以操作,先把購物車里的商品全部刪除,然後再用你電腦試試看。
沒碰上此類情況,僅供參考。
『陸』 我是用cookie實現購物車的 為什麼我每次刷新購物車那個界面 購物車里的數量會自動增一.net語言開發的
cookie不好換session吧
肯定要放在伺服器端卅 別人清楚了cookie 他不就沒記錄了啊 你看淘寶 會因為換台電腦之前加入購物車的就沒了嗎
『柒』 java怎麼用cookie寫購物車
處理cookie思路。。
//以用戶的用戶名和密碼創建cokie
CookienameCookie=newCookie("name",java.net.URLEncoder.encode(name.trim(),"utf-8"));
CookiepasswordCookie=newCookie("password",java.net.URLEncoder.encode(password.trim(),"utf-8"));
//設置cookie的實效時間
nameCookie.setMaxAge(7*24*60*60);
passwordCookie.setMaxAge(7*24*60*60);
//設置Cookie的父路徑
nameCookie.setPath(request.getContextPath()+"/");
passwordCookie.setPath(request.getContextPath()+"/");
//放入Cookie到響應頭
HttpServletResponseresponse=ServletActionContext.getResponse();
response.addCookie(nameCookie);
response.addCookie(passwordCookie);
『捌』 關於使用cookie設計購物車
說說我的思路 沒有代碼
我的思路是採用臨時cookie ,未登錄的前提下添加商品,就將該商品代號保存到cookie商品的values中去,再買就繼續增加value,未登錄情況查看購物車,伺服器讀取臨時cookie的values,根據商品代號顯示具體信息,登錄後檢查cookie是否為空,將商品保存到資料庫。繼續添加商品就通過session判斷用戶保存到資料庫,用不到cookie了
用戶離開,關閉網站 臨時cookie丟失 B用戶購物不受影響
此時B用戶完成了自己的操作離開,A用戶回來了想繼續完成之前的操作,又該如何解決
如果之前A在未登錄的狀態下,由於cookie數據丟掉,不可能獲取先前的信息了
即便你用cookie用戶名 cookie商品代號 設置期限 B用戶一樣會佔用的 換句話說A回來cookie里的數據也是B的,但是不是說不可實現,只是我的水平不會實現而已!!
『玖』 用cookie實現的購物車當我關閉網頁時cookie里的內容自動清空!
打開ie的Internet選項,然後如圖設置就可以了,每次關閉ie自動清理cookie
『拾』 asp.net mvc通過cookie實現簡單的購物車功能
1.整個商品表,購物車表
2.點擊購買
沒登陸情況下把商品Id(或是其他能標識唯一商品的值)存入Cookies 在購物車頁面根據Cookies里存的id集合讀取商品信息列出來 此時購物車頁面讀取的是cookies里商品id對應的信息
登錄後把cookies里存的數據加到購物車表 點擊購買直接存入購物車表 此時購物車頁面數據讀取的是資料庫中商品數據
商品信息都有了 計算價格就簡單了
這是比較簡單的實現方式了