2011-05-24 65 views
2

我正在開發電子商務應用程序。但問題在於,用戶在購物前添加產品並在訂購前關閉瀏覽器,購物車將購買所有產品。所有的購物車物品都保存在一張桌子上。瀏覽器關閉後從數據庫中刪除

我只是想沖洗購物車,如果用戶關閉瀏覽器沒有排序。

+2

你在使用會話嗎? – Jrod 2011-05-24 14:21:15

+0

保存購物車的內容或至少將產品ID保存爲Cookie,然後僅在提交訂單時處理Cookie – 2011-05-24 14:23:05

+0

是我正在使用會話。但是一旦用戶將產品添加到數據庫中,產品就會保存在購物車表中。 – 2011-05-24 14:26:48

回答

2

您可以使用JavaScript事件捕捉瀏覽器關閉,併發送Ajax請求一些腳本,將刪除購物車數據:

修訂

<script language="javascript"> 
function fnUnloadHandler() { 
    xmlhttp=null; 
    if (window.XMLHttpRequest) 
    {// code for Firefox, Opera, IE7, etc. 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else if (window.ActiveXObject) 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    } 

    if (xmlhttp!=null) 
    { 
     xmlhttp.open("GET","http://yourhost/del_cart_actionFile.php",true); 
     xmlhttp.send(null); 
    } 
    else 
    { 
     alert("Your browser does not support XMLHTTP."); 
    } 
} 
</script> 
<body onbeforeunload="fnUnloadHandler()"> 
</body> 
+0

如果用戶的瀏覽器或計算機崩潰會發生什麼? – 2011-05-24 14:29:46

+0

沒有什麼heppens,用戶數據將仍然在數據庫中。該解決方案將時間戳數據添加到購物車表中的每個項目並檢查(使用cron)日期差異。如果差異> 1天,則刪除此數據。 – 2011-05-24 14:32:27

+0

我是AJAX的新手。請你能描述一下在AJAX中刪除的代碼是什麼。 – 2011-05-24 14:39:36

1

服務器端實際上並不知道何時關閉瀏覽器。您可以ping服務器onBeforeClose並告訴它沖洗購物車,但這意味着當用戶關閉一個選項卡時 - 它也會沖洗。

如果您的用戶已經登錄 - 您只能保留「瀏覽器會話」的會話cookie,並且這樣用戶在他或她回來時將被註銷。此時 - 每當用戶登錄時 - 沖洗購物車。

2

有沒有可靠辦法知道/警報用戶關閉瀏覽器時的服務器。您需要重新考慮您的設計:即,除非結賬完成,否則不要將購物車項目保留到數據庫。您可以並應該將用戶會話中的購物車項目保存下來,或者可能在Cookie客戶端(除非您的購物車的尺寸很大)。

否則使用會話密鑰在db中鍵入購物車數據。然後,您可以(可能)在應用程序的會話管理中添加某種掛鉤以清除會話時刷新數據庫內容。

+0

我認爲保持購物車項目是一個可怕的想法 – Mikhail 2011-05-24 15:18:32

+0

@Mikhail - 是的,我不認爲這種解決方案是建議 – 2011-05-24 15:23:53