ASP.NET 大師:使用 Session 變數有哪些優點/缺點?
我已經對這個主題進行了搜尋,並且一遍又一遍地找到相同的數據——回顧了三種不同類型的會話。(InProc,Sql,StateServer)但是,我的問題具有不同的性質。
具體來說,首先使用內置 .NET 會話的優點/缺點是什麼?
這就是我要問的原因:一位 .NET 開發人員告訴我永遠不要使用內置的 Microsoft Session。一點也不。甚至沒有創建自定義會話狀態提供程序。他對此的推理如下——如果您在 IIS 中打開了 Session,它會使您的所有請求同步發生。他說啟用會話會降低 Web 伺服器的性能。
他對此的解決方案是自己創建一個會話——一個儲存您需要的所有值並在數據庫內外序列化的類。他建議您儲存唯一 ID 以在 cookie 或查詢字元串變數中引用它。在我們的環境中,需要使用數據庫來儲存會話,因為我們製作的所有頁面都在網路農場上,並且我們使用 Oracle——所以我同意這部分。
使用內置 Session 是否會比自製 Session 降低性能?這有什麼安全問題嗎?
所以總結一下,有什麼優點/缺點?
感謝所有回答的人!
首先,瀏覽器在給定時間只會向給定主機名發出兩個請求。在大多數情況下,這些請求是針對靜態內容(JS 文件、CSS 等)的。因此,對動態內容的請求序列化幾乎不是人們可能想到的問題。另外,我認為這可能與 Classic ASP 混淆,其中使用 Session 的頁面肯定是序列化的,我不相信 ASP.Net 就是這種情況。
使用 ASP.Net 會話狀態(SQL 模式、狀態伺服器或自定義),您擁有一個標準的實現,並且在整個應用程序中都是一致的。如果您不需要共享會話資訊,這是您最好的選擇。如果您需要與其他應用程序環境(php、swing/java、經典 asp 等)共享資訊,則可能值得考慮。
另一個優點/缺點是,有很多開發人員專注於會話的內置方法,以提高性能,並設計而不是滾動您自己的方法,即使使用不同的提供者也是如此。
我的經驗是,當您適當地使用會話時,會話是管理狀態的好方法。然而,它經常被濫用,導致許多開發人員共享“從不使用會話”的情緒。
當我們錯誤地使用會話從數據庫中儲存大量數據以“節省行程”時,我和許多其他開發人員都遇到了重大的性能問題。這是不好的。當超過幾個使用者使用該應用程序時,每個會話儲存 2000 條使用者記錄將使 Web 伺服器癱瘓。會話不應用作數據庫記憶體。
但是,每個會話儲存一個整數是完全可以接受的。表示目前使用者如何使用您的應用程序(想想購物車)的少量數據是會話狀態的一個很好的用途。
對我來說,這真的是關於管理狀態。如果做得正確,那麼會話可以成為管理狀態的許多好方法之一。不過,應該在一開始就決定如何管理狀態。大多數時候,當有人決定“在會話中扔東西”時,我們會遇到麻煩。
我發現這篇文章在使用程序外模式時非常有用,並且它包含一些我自己從未想過的技巧。例如,與其將類標記為可序列化,不如將其原始數據類型成員儲存在單獨的會話變數中,然後重新創建對象可以提高性能。