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
留言