2009-09-03 29 views
20

我正在製作涉及購物車的網站。 有兩個主要要求:針對非註冊用戶的購物車

  1. 用戶體驗的傢伙想在登錄/認證是在整個工作流程的最後一步。用戶可以完成所有購物,並且僅在退房時被要求登錄。

  2. 購物車不應該過期(甚至在瀏覽器關閉時),除非用戶(註冊或不是)退房。

在上述背景下,我對於以下問題,以維護車的狀態:

我應該去與基於文件或數據庫會話?請記住這是針對未註冊用戶的。我的理解是,我最終會在數據庫中有很多記錄。

另一種選擇似乎是將購物車的內容放入加密的cookie中,但對cookie文件有大小限制。

你會在這種情況下做什麼?我真的很感激你的答案。

回答

15
  1. 跟蹤用戶。使用編碼到cookie中的GUID n年到期。

  2. 存儲購物袋。您不希望將包放入cookie中,主要是因爲它的尺寸可能存在。這留下了將它放在介質上並從介質中檢索它的選項。使用除數據庫之外的任何東西就像回到過去一樣,數據庫擅長存儲和檢索數據。

  3. 管理你的購物袋。現在,您的架構的 問題,首先,如果 您要運行查詢 對購物袋的 數據庫(即 袋多少購物包含項目X)你可能 想要一個傳統的關係 模式。然而,這在插入方面具有開銷 。更新, 選擇(並加入)和刪除 袋數據(在某些時候,你將有 袋將永遠不會再使用 ,但佔用寶貴的磁盤 空間)。對於一個繁忙的站點,這是一個很少的Traranactions Per Second, ,但任何數據庫應該能夠應對 。如果您不需要在數據庫中查詢 購物袋, 那麼您可以將它作爲XML存儲。只需 序列化包並將其轉儲到 表中,其中PK作爲存儲在用戶cookie中的GUID爲 。這個 比傳統模式要快很多,如果 的請求確實出現在關係模式中, 總是會撕裂未來的XML。

這就是我們要做的(Xml Bag),我們有一百萬個客戶羣。

6

我會通過文件管理會話與數據庫管理的會話。確保你有一個會話時間戳,這樣你最終可以殺死舊會話(如果已經過了12個月,購物者可能不會回到原來在購物車中的物品)。

使用數據庫而不是文件進行此操作會使最終過期的信息變得更容易。

請注意,只要將數據庫會話綁定到用戶計算機上,該數據庫會話就永遠有效。如果用戶從不同的瀏覽器回到商店,他們將找不到他們的會話。如果兩個人共用同一臺電腦,他們將會在找到彼此的會話。希望沒有潛在的令人尷尬的物品將在購物車中...

1

在cookie中存儲AnonymousSessionID,與數據庫中的購物車相關聯。

然後,您將有一個計劃程序任務在一段時間後(例如,一天)清除匿名會話。這將保持您的數據庫清理廢棄的會話。

如果用戶註冊,您將永久將其購物車與其帳戶重新關聯。如果用戶下訂單,您可以清空購物車。

0

有了這些規格,我會去基於數據庫的會話狀態。但是,您應該仔細閱讀關於如何在您選擇的Web服務器中處理會話狀態的內容。既然你想能夠將狀態恢復到正確的人。

0

如果您使用ASP.NET這裏的什麼我(約)做:

  • 使用Profile捕捉用戶立即通過電子郵件通知越好(如果他們不完成給他們發郵件訂購)。即使用戶實際上沒有真正註冊,也可以啓用匿名配置文件屬性,該屬性保存到aspnet數據庫。
  • 將表示訂單的XML包粘貼到會話中。這是持久的數據庫與一個正規的身份證。
  • 將購物車的ID存儲在ASP.NET Profile中。這樣,當會話過期時,您可以從配置文件中的ID重新加載它。這具有用戶看不到的車ID在Cookie中的利益,您可以在會員/ profile文件數據庫和存儲之間您正在使用您的訂單

(不要試圖存儲XML輕鬆鏈接記錄我認爲這就是要求性能問題,但理論上你可以假設)

0

我認爲你有一些期望值得管理,或者你可能不清楚需求。

  1. 用戶體驗的傢伙想在登錄/認證是在整個工作流程非常 最後一步。 用戶得到所有的購物, 被要求登錄只有在 檢出。
  2. 購物車不應該過期(即使在瀏覽器關閉) 除非用戶(註冊或沒有) 確實退房。

具體來說,一個匿名的,未登錄的用戶的購物車被保存?這是瘋狂。確保這不是期望,並在設計文檔中予以澄清。

+4

這不是瘋狂的。我們經常在他們第一次訪問我們的網站後24-48小時內收到用戶的訂單。即使他們還沒有創建帳戶,我們也會保存訂單。您需要謹慎清除數據,當然還有多大的購物車,並考慮您有多少用戶。瘋狂不要imho :-) – 2009-10-25 00:56:05