小編給大家分享一下Asp.net中安全退出時(shí)如何清空Session或Cookie,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)公司 - 成都移動機(jī)房,四川服務(wù)器租用,成都服務(wù)器租用,四川網(wǎng)通托管,綿陽服務(wù)器托管,德陽服務(wù)器托管,遂寧服務(wù)器托管,綿陽服務(wù)器托管,四川云主機(jī),成都云主機(jī),西南云主機(jī),成都移動機(jī)房,西南服務(wù)器托管,四川/成都大帶寬,大帶寬服務(wù)器,四川老牌IDC服務(wù)商概覽:
網(wǎng)站中點(diǎn)擊退出,如果僅僅是重定向到登錄/出頁面,此時(shí)在瀏覽器地址欄中輸入登錄后的某個(gè)頁面地址如主頁,你會發(fā)現(xiàn)不用登錄就能訪問。這種所謂的退出并不是安全的。
那么怎樣做到安全退出呢?
那就是點(diǎn)擊退出后清空相應(yīng)的Session或Cookie。
清空Session的代碼:
Session.Clear(); Session.Abandon();
清除Cookie的正確代碼(假設(shè)Cookie名稱為UserInfo):
if (Request.Cookies["UserInfo"] != null) { Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1); }
如果需要清除所有Cookie,則遍歷:
for (int i = 0; i清除Cookie的錯(cuò)誤代碼(假設(shè)Cookie名稱為UserInfo):
if (Request.Cookies["UserInfo"] != null) { Response.Cookies.Remove("UserInfo"); }你會發(fā)現(xiàn),這樣處理后,Cookie依然存在,為什么就是刪不掉呢?我們?nèi)タ纯?NET的HttpCookieCollection實(shí)現(xiàn)源碼:
public void Remove(string name) { if (this._response != null) { this._response.BeforeCookieCollectionChange(); } this.RemoveCookie(name); if (this._response != null) { this._response.OnCookieCollectionChange(); } }這個(gè)操作在HttpCookieCollection這個(gè)集合里面刪除了cookie,當(dāng)服務(wù)器將數(shù)據(jù)傳輸?shù)娇蛻舳说臅r(shí)候,不會包含這個(gè)已經(jīng)在服務(wù)端刪除了的Cookie的任何信息,瀏覽器也就不會對它做任何改變(remove方法只是不讓服務(wù)器向客戶機(jī)發(fā)送那個(gè)被刪除的cookie,與此cookie留不留在客戶機(jī)里無關(guān))。所以cookie刪除不掉的情況就出現(xiàn)。
既然Response.Cookies.Remove沒有辦法實(shí)現(xiàn)我們需要的效果,為什么微軟還有留著呢,因?yàn)镃ookieCollection實(shí)現(xiàn)ICollection接口,romove是必須實(shí)現(xiàn)的方法,盡管它沒多大的實(shí)際價(jià)值。而集合的romove也應(yīng)該是這樣的實(shí)現(xiàn)方式,只不過微軟在寫MSDN的時(shí)候,描述得太不清楚了,給我們造成了不小的麻煩。
下面就總結(jié)下實(shí)現(xiàn)安全退出的幾種方式:
1).用Linkbutton,Button等服務(wù)器控件實(shí)現(xiàn)退出
這種方式好處理:直接在服務(wù)器控件對應(yīng)的事件里編寫清空Session或Cookie的代碼即可。
2).用注銷等HTML標(biāo)記實(shí)現(xiàn)退出
對于這個(gè)特殊標(biāo)記,可以這樣實(shí)現(xiàn):
注銷
,在logout.aspx的Page_Load事件中編寫清空Session或Cookie的代碼即可。對于等HTML標(biāo)記,可以在HTML標(biāo)記的相應(yīng)client事件中用Js-Ajax,或者jQuery-Ajax,在一般處理程序(.ashx)中編寫清空Session或Cookie的代碼即可。
對于等HTML標(biāo)記,還可以這樣:在當(dāng)前頁面添加一個(gè)服務(wù)器控件如Button,用div包含,并讓其隱藏(注意:隱藏不可見,不能通過服務(wù)器屬性Visible=False,只能通過設(shè)置div的display:none;來實(shí)現(xiàn)),在Button的服務(wù)器事件Cilck里編寫清空Session或Cookie的代碼;然后在HTML標(biāo)記的相應(yīng)client事件中用Js或者jQuery調(diào)用Button控件的Click事件即可(通過服務(wù)器屬性Visible=False設(shè)置Button隱藏,Js或者jQuery調(diào)用Button控件的Click事件將失效)。
以上是“Asp.net中安全退出時(shí)如何清空Session或Cookie”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁名稱:Asp.net中安全退出時(shí)如何清空Session或Cookie-創(chuàng)新互聯(lián)
文章URL:http://weahome.cn/article/geejh.html