2010-11-16 44 views
0

我的問題是如何最好地處理會話的臨時數據。該場景類似於購物車或像投注單。用戶正在瀏覽網站並添加具有唯一ID的項目時。如果用戶想要提交數據,我只對以這種方式收集的數據感興趣。會話持久數據的最佳做法,以儘量減少發回

我正在使用jQuery,JSON和MS SQL DB開發ASP .Net 3.5。

正如我所看到的那樣,有幾種可能的方法可以做到這一點。

  • 執行完整發布回服務器。存儲每個選擇,相應地更新頁面控件。
  • 通過Ajax請求將選擇發送回服務器並更新顯示控件。
  • 在JavaScript中構建所有功能並將所有值存儲在會話Cookie中。除非用戶選擇提交,否則不會發送到服務器。

我真的想在這裏考慮的性能,但是我不希望用JavaScript代碼行的1000年結束了..

與贊成的和反對的最佳執行的任何建議?

乾杯, 斯特凡

+0

我用一個Ajax解決方案將所有數據存儲在一個List <>的自定義類中。工作非常好,很快,唯一的問題是我在共享環境上運行,現在他們重置了我的應用程序池然後一些人將他們的數據重置,但計劃轉移到一個單一的服務器解決方案。 – StefanE 2010-11-17 14:28:12

回答

1

將東西存儲在會話cookie中並不是一個好主意,因爲每次請求都會將其發送回服務器。如果你可以找到一種方法來存儲客戶端的狀態而不使用cookie,那麼你可能有一個可行的以客戶端爲中心的選項,但我想不出任何可移植的東西。 HTML5和Flash中有一些可以實現的功能,但是您不想去那裏 - 然而,對於前者,以及對於後者來說都是如此。

我會使用AJAX回發到服務器(優雅地降級到無法處理的瀏覽器的完整帖子),然後將信息存儲在易失性存儲器中 - 即不在數據庫中。只在需要時將其寫入數據庫。這在Java中很容易實現(可以將信息與會話相關聯),所以我假設ASP.net也有辦法做到這一點。

+0

湯姆。關於這一行:(對於無法處理的瀏覽器,優雅地退化爲完整的帖子)。這真的有必要嗎?不應該所有的或多或少的現代瀏覽器支持Ajax?移動瀏覽器我根本不打算支持。 – StefanE 2010-11-16 16:26:42

+0

這不是絕對必要的;沒有它,99%的人會沒事的。對於1%來說很好,這可能包括使用屏幕閱讀器的盲人等等。 – 2010-11-17 11:42:38

0

所有三種可能性看起來對我好。但是,問題是:您期望有多少流量?

您提出的每個選項都適合給定的場景。比方說,你將有很多(成千上萬)用戶,而不是很多可用的硬件,那麼你應該儘量減少對你的應用程序的請求數量,並儘可能地將數據存儲在客戶端中,然後再發送到服務器。

如果是較小的應用程序,那麼使用Session或其他中央數據庫存儲就可以。

這一切都取決於您的要求。