2011-04-08 113 views
0

我在網站上實現了簡單的購物車。我將購物車和物品保存在Session物品中。用戶結賬後(使用Paypal),我清除購物車物品。這工作得很好,但我在下面的情況下出現了問題:購物車問題

假設用戶增加了一些物品到購物車,並打開了另一個瀏覽器,並記錄在他現在可以看到在兩種瀏覽器中的項目。現在,如果他在一個瀏覽器中籤出,他仍然能夠在其他窗口中看到購物車項目,因爲兩個瀏覽器都有單獨的會話。

我應該採取什麼方法來避免這種情況,還是必須忍受這種情況?

編輯: -在發佈這個問題後,我正在考慮這個問題。我會解決這個簡單的解決方案,無論何時用戶去結帳,我會打數據庫加載購物車,而不是會話。這樣我就不會打數據庫顯示購物車中的物品(頂部),並且不會有任何基於幻影物品的結賬。

回答

1

從您保存會話上車的物品,你有你有diferent車diferent會話的時刻。

爲了消除這一點,你需要爲你要救你的車,所有的會話一個共同的地方,這是一個數據庫在桌子上。這個共同的地方通過用戶ID連接到用戶ether,以及用戶cookie。

+0

你的解決方案肯定會消除這個問題,但它確實是一個小網站,我現在不想全部實現共享會話等。我想到了另一個選項,我正在添加到我的問題中。 – TheVillageIdiot 2011-04-08 14:56:49

+0

@Aritos這是一個很好的解決方案,但是目前我會繼續使用我在編輯的問題中概述的方法。 – TheVillageIdiot 2011-04-12 04:52:46

0

你不得不AJAX的IFY頁面的購物車面板部分,並使用setTimeout()定期刷新它。

然而,如果你做得正確,再次點擊第二頁上的「checkout」應該不會導致重複事務,並且列表將在下一頁加載時刷新。

編輯

並以「做對」我的意思是根據用戶的ID,而不是僅僅 Session對象跟蹤車中的物品。

+0

的項目被它們自己獨特的ID +用戶ID進行跟蹤。但問題是我添加項目x到購物車,然後檢查出來,然後再添加項目x並退房。有沒有辦法知道它是否是同一個項目或新的:( – TheVillageIdiot 2011-04-08 13:01:49

+0

當然在這種情況下,你想要結賬兩次,因爲你分別添加了兩個相同的項目?一旦項目被檢出,它將關聯與某種交易/訂單ID(我假設?),所以你可以告訴他們是兩個獨立的實體,而不是一個真正的1欺騙? – Widor 2011-04-08 13:08:03

0

你的web應用程序是基於HTTP協議的打開和關閉連接只是爲了滿足一個HTTP Web請求。現在很正常的是,如果你打開另外兩個瀏覽器並查看其中一個瀏覽器,你仍然可以在另一個瀏覽器上看到相同的頁面(信息)。我認爲你應該做的只是避免用戶可以兩次退房或處理某人試圖檢查一個空籃子(這是你的情況,如果用戶打第二個瀏覽器結帳) ,你可以這樣做只是顯示一條消息。如果您需要定期刷新的解決方案,請記住如果用戶打開並登錄到250個不同的會話會發生什麼情況:您的網絡應用程序將被擊中多少次? 如果你爲我的建議去所有用戶會話將得到一個錯誤頁面,如:bastek是空的。 我希望這是有道理的