Session.RemoveAll() 及Session.Abandon() 的差別


Session.RemoveAll() 會清除目前工作階段中的所有Session記錄
而不僅僅只清除Session中的內容
這點可於執行RemoveAll()方法後
使用Response.Write(Session.Count),觀其結果為0得到驗證

Abandon()方法不同於RemoveAll()之處
在於Abandon()除了跟RemoveAll()一樣會清除所有Session之外
亦會結束目前的工作階段(RemoveAll()則仍處於同一個工作階段)
若工作階段模式(Session.Mode)設定為 InProc 的話
Abandon()會觸發 Session_End 事件,而RemoveAll()則不會
不過常由於網頁仍在執行的緣故,故立即又觸發了Session_Start()事件
使得兩者表面上看起來並沒有太大的不同
但其實執行Abandon()後已變成另一個工作階段了
這點可以使用IsNewSession()方法來加以驗證
得到的結果RemoveAll()將是False, Abandon()則為True

總歸來說,兩者最大的不同
就在於觸發Session_End事件與否了

另外還有Session.Clear()方法
其功能則與RemoveAll()相同,就不再墜述了

其他參考:
https://dotblogs.com.tw/jimmyyu/2009/08/07/9930

留言

這個網誌中的熱門文章

嘗試卸載資料庫時,發生資料庫正在使用的而無法卸載的可能解決方案

PMP常用的英文單字