2011-09-04 37 views
25

請任何人建議我如何在asp.net中實際工作? 我迷惑在會話的一部分,並希望它的簡單知識,請指導我會話如何在asp.net中工作?

+2

嘗試讀取這個CodeProject上的文章 http://www.codeproject.com/Articles/32545/Exploring-Session-in-ASP-Net – kfuglsang

回答

45

ASP.NET使用Cookie來跟蹤用戶。當您第一次嘗試向會話寫入內容時,會將cookie發送給客戶端,如ASP.NET_SessionId。這個cookie是由客戶在後續請求中發送的。由於這個cookie,服務器能夠識別客戶端並寫入/讀取關聯的會話數據。需要注意的是,這個cookie不是持久的(在瀏覽器重新啓動後不會存在),並且與HttpOnly標誌一起發出,意味着客戶端腳本無法訪問它。

除了餅乾,你還可以配置ASP.NET使用隱藏域或會話ID附加到每個請求的查詢字符串。

所以後面會基本想法是,實際的數據被存儲在某個地方的服務器上,客戶端發送一些ID對每個請求,使服務器能夠知道在哪裏可以找到它的數據。

默認有3個地方的實際會話數據可以存儲:

  • 進程內:會話存儲到應用程序的內存(速度最快的,但如果你有一臺服務器的多臺服務器農場,這將無法正常工作)
  • 程序外:數據存儲到一個單獨的服務器,其中安裝了狀態服務(數據存儲在單獨的計算機的內存中,這意味着多個Web服務器可以工作網絡農場)
  • SqlServer:數據存儲在SQL Server中(它是最慢但最可靠的會話數據存儲在SQL Server數據庫中,並可能servive如果會話服務器崩潰這是不符合外的PROC)
  • 定製實現的情況:感謝您ASP.NET的可擴展性可以編寫自己的會話提供和存儲無論你喜歡哪個數據。

這是關於MSDN的一篇很好的文章,它探討了ASP.NET Session State

4

會議:存儲在服務器端]

1.如果您創建會話方式,服務器存儲會話數據,並創建一個會話ID。 [使用的SessionID會話數據存儲在國家提供的服務器]

2.然後服務器返回的SessionID到客戶端的瀏覽器。

3.然後您可以將返回的SessionID存儲在Cookie中。

4.即將發生的使用SessionID附加的後續請求可以訪問服務器數據。

注意:僅針對當前瀏覽器會話和用戶特定的會話。