我們有一個asp.net應用程序,它使用跨頁面的單個用戶的會話(in-proc),現在他們希望保持數據(例如購物車)更持久,即使他們離開Web應用程序,意味着關閉瀏覽器,下次他們登錄使用相同的ID,他們希望數據回來,ASP.NET中的任何解決方案?比會話更持久?
如果我們保存在SQL服務器我認爲這是微軟的一個選項會話,但我不知道如果它甚至用戶後工作離開應用程序,或關閉瀏覽器
我們有一個asp.net應用程序,它使用跨頁面的單個用戶的會話(in-proc),現在他們希望保持數據(例如購物車)更持久,即使他們離開Web應用程序,意味着關閉瀏覽器,下次他們登錄使用相同的ID,他們希望數據回來,ASP.NET中的任何解決方案?比會話更持久?
如果我們保存在SQL服務器我認爲這是微軟的一個選項會話,但我不知道如果它甚至用戶後工作離開應用程序,或關閉瀏覽器
會話數據意味着只堅持瀏覽器會話的整個生命週期。
答案是不保存會話中的數據,而是將其保存在ShoppingCart
和ShoppingCartItem
表中的數據庫中。這些將會持續下去,只要你想要它們。
ShoppingCart
表將有一個UserID
列,即FK
到User
表。
您需要構建關係數據庫並將條目存儲在那裏。
當然,Application
範圍高於Session,但它只會存在於應用程序池的整個生命週期中。這聽起來像你正在尋找永久存儲。
我已經看到使用cookie的購物車系統,而有些使用cookie和數據庫。只有
餅乾:餅乾的「官方」的大小爲4K
餅乾+數據庫:在cookie存儲一個GUID,並用它在數據庫
但參考...我想將購物車存儲在cookie或cookie /數據庫中並不是非常人性化。如果我離開,我寧願網站忘記我的購物車。當我經過我的批准網站存儲這些信息時,我很惱火。
您需要使用數據庫來鏡像會話中包含的數據,這樣數據在用戶註銷,應用程序重新啓動或服務器重新啓動後將持續很長時間。您可以將會話對象保存爲sql-server作爲二進制對象,並在需要時序列化/反序列化,但您怎麼知道何時執行初始序列化?當用戶關閉瀏覽器窗口時很難確定何時註銷。
將會話對象存儲爲單個列可能在此期間工作,但從長遠來看,您可能希望提出適當的關係設計並將數據存儲在表中的列中,這樣您就可以運行查詢和報告針對「正在進行中的」購物車(例如:人們在購物車最終退房前多久會坐下)?
正如其他人所說,cookie是另一種選擇,但存在於客戶端,如果他們決定清除cookie(許多技術支持人們似乎將這種建議作爲用戶抱怨慢速瀏覽器的第一個響應),購物車丟失。
+1 - 會話之外的持久性是數據庫。保存會話=糟糕。 – corsiKa 2010-06-28 15:12:41