一、什么是Session?
簡單來說,就是用戶與網站服務器建立的一個連接,服務器分配給一個編號。當一臺WWW服務器運行時,可能有若干用戶正在瀏覽運行在這臺服務器上
的網站。當用戶首次與這臺WWW服務器創建連接的時候,它就和這臺服務器建立了一個Session,同時服務器會自動為其分配一個SessionID,用來標識
這個用戶的唯一身份,也就是不同的客戶端會生成不同的Session對象。存儲在對話狀態變量中的數據,存在的周期相對較短。實際上SessionID
是由WWW服務器隨機產生的一個由24個字符組成的字符串。
二、Session的具體使用
1、Web.Config文件中的Session配置
mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false" timeout="20" ?/>
2、必須包含的屬性定義
mode:設置將Session信息存儲到哪里,有四種方式:
Off:設置不使用Session功能。
InProc :將Session存儲在IIS進程內,這是默認值,也最常用(優點是簡單,性能最高。但是當重啟IIS服務器時Session丟失。);。
StateServer :將Session存儲在ASP.NET狀態服務進程中(重新啟動Web應用程序時保留會話狀態,并使會話狀態可以用于網絡中的多個Web服務器)。
SQLServer :將Session存儲在SQL Server中(存儲在內存和磁盤中,服務器掛掉重啟后都還在)。
3、可選屬性的定義
cookieless:獲取或設置一個值,該值指示是否使用 cookie 來標識客戶端會話。
true 如果所有的請求會為無 cookie,或 false 如果沒有請求會為無 cookie,或其中一個 HttpCookieMode 值。
ASP.NET 2.0 版中的默認值是 AutoDetect。 在早期版本中,默認值是 false。
timeout:設置經過多少分鐘后服務器自動回收Session信息,默認為20分鐘
stateConnectionString:在遠程存儲會話狀態時,此屬性指定服務器名稱和端口。 stateConnectionString 時,屬性是必選項 Mode 設置為 StateServer。
sqlConnectionString:設置為sqlConnectionString 時,屬性是必選項 Mode 設置為 SQLServer。
stateNetworkTimeout:獲取或設置 Web 服務器和狀態服務器之間的網絡連接可以保持空閑的時間量。
屬性值:
Type: System.TimeSpan
以秒為單位,Web 服務器和狀態服務器之間的網絡連接可保持空閑狀態,放棄該會話前的時間。 默認值為 10 秒。
設置為 sessionStateSection 時,屬性是必選項 Mode 屬性設置為 StateServer。
3、Session用法示例
例如:Session["userName"]="小明";//存儲信息
string name=session["userName"];//取值
Session。Clear();//從Session狀態集合中移除所有的鍵和值
Session.Abandon();//取消當前Session會話
三、Session的運行原理圖解
四、Session與Cookie的區別
1、cookie存客戶端,session存服務端。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙。
3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE。
4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
五、常見的Session超時和丟失的情況以及解決方法
1、服務器內存補充導致Seesion丟失;解決方法:IIs設置Session超時時間,重新設置會話時間,默認為20 min。
2、殺毒軟件掃描Web.cofig;解決方法:設置殺毒軟件不掃描Web.cofig配置文件。
3、程序內部有讓Session丟失的代碼;解決方法:檢查代碼處理。
4、程序有框架頁面和跨域情況;解決方法:在Window服務中將ASP.NET State Service 啟動。
歡迎關注我的公眾號(同步更新文章):DoNet技術分享平臺
閱讀原文