asp.net(c#)有關(guān) Session 操作的幾個(gè)誤區(qū)
更新時(shí)間:2007年06月28日 00:00:00 作者:
1. this.Session["username"] = null
HttpSessionState 內(nèi)部使用 NameObjectCollection 類型的集合對(duì)象來存儲(chǔ)用戶數(shù)據(jù)。因此使用 this.Session["username"] = null 僅僅是將該元素的值設(shè)為 null 而已,并沒有真的將其從 Session 中移除。(為什么?暈~~~ 建議看看 C# 基礎(chǔ)方面的書。)
正確的方法是:this.Session.Remove("username");
刪除全部數(shù)據(jù):this.Session.RemoveAll(); 或 this.Session.Clear();
2. this.Session.Abandon()
該方法會(huì)導(dǎo)致當(dāng)前 Session 被取消,系統(tǒng)會(huì)觸發(fā) Global.asax 中的 Session_End 事件(僅限于 Mode = InProc 時(shí))。
盡管再次發(fā)出請(qǐng)求時(shí) SessionID (可能)沒有發(fā)生變化,但是你會(huì)發(fā)現(xiàn) Global.asax Session_Start 事件被觸發(fā)。你還可以使用 this.Session.IsNewSession 屬性來判斷當(dāng)前 Session 是否重新創(chuàng)建的。
由于某些組件和控件可能要使用 Session 信息(如使用 this.Session.SyncRoot 進(jìn)行同步),因此不要輕易使用該方法清理 Session。
3. 用戶身份驗(yàn)證
不要使用 this.Session["username"] = "ZhangSan" 、if (this.Session["username"] != null) 這樣的方式進(jìn)行用戶身份驗(yàn)證,這種方式既不安全也不合理。有關(guān)身份驗(yàn)證請(qǐng)參考 MSDN 文檔或雨痕寫的相關(guān)文章。
HttpSessionState 內(nèi)部使用 NameObjectCollection 類型的集合對(duì)象來存儲(chǔ)用戶數(shù)據(jù)。因此使用 this.Session["username"] = null 僅僅是將該元素的值設(shè)為 null 而已,并沒有真的將其從 Session 中移除。(為什么?暈~~~ 建議看看 C# 基礎(chǔ)方面的書。)
正確的方法是:this.Session.Remove("username");
刪除全部數(shù)據(jù):this.Session.RemoveAll(); 或 this.Session.Clear();
2. this.Session.Abandon()
該方法會(huì)導(dǎo)致當(dāng)前 Session 被取消,系統(tǒng)會(huì)觸發(fā) Global.asax 中的 Session_End 事件(僅限于 Mode = InProc 時(shí))。
盡管再次發(fā)出請(qǐng)求時(shí) SessionID (可能)沒有發(fā)生變化,但是你會(huì)發(fā)現(xiàn) Global.asax Session_Start 事件被觸發(fā)。你還可以使用 this.Session.IsNewSession 屬性來判斷當(dāng)前 Session 是否重新創(chuàng)建的。
由于某些組件和控件可能要使用 Session 信息(如使用 this.Session.SyncRoot 進(jìn)行同步),因此不要輕易使用該方法清理 Session。
3. 用戶身份驗(yàn)證
不要使用 this.Session["username"] = "ZhangSan" 、if (this.Session["username"] != null) 這樣的方式進(jìn)行用戶身份驗(yàn)證,這種方式既不安全也不合理。有關(guān)身份驗(yàn)證請(qǐng)參考 MSDN 文檔或雨痕寫的相關(guān)文章。
相關(guān)文章
.Net Core中使用ref和Span<T>提高程序性能的實(shí)現(xiàn)代碼
這篇文章主要介紹了.Net Core中使用ref和Span<T>提高程序性能的簡(jiǎn)單實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-05-05Asp.NET Core 限流控制(AspNetCoreRateLimit)的實(shí)現(xiàn)
這篇文章主要介紹了Asp.NET Core 限流控制(AspNetCoreRateLimit)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03ASP.NET中repeater嵌套實(shí)現(xiàn)代碼(附源碼)
repeater嵌套經(jīng)常會(huì)在一些特殊效果顯示下會(huì)用到,新手朋友們可以詳細(xì)看下本文,希望對(duì)你有所幫助,代碼很整潔同時(shí)附有源碼2013-03-03.NET Core系列之MemoryCache 緩存選項(xiàng)
這篇文章主要介紹了.NET Core系列之MemoryCache 緩存選項(xiàng),詳細(xì)的介紹一下 MSCache 中的 Options,由此來介紹一些 MSCache 中的內(nèi)部機(jī)制,感興趣的小伙伴們可以參考一下2018-08-08在.net項(xiàng)目使用JSONSchema示例詳解
這篇文章主要為大家介紹了在.net項(xiàng)目使用JSONSchema的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05輕量級(jí)ORM框架Dapper應(yīng)用之Dapper支持存儲(chǔ)過程
這篇文章介紹了Dapper支持使用存儲(chǔ)過程的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03.NET?Core跨平臺(tái)資源監(jiān)控工具CZGL.SystemInfo用法
這篇文章介紹了.NET?Core跨平臺(tái)資源監(jiān)控工具CZGL.SystemInfo的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02