您好,登錄后才能下訂單哦!
小編給大家分享一下Asp.net中安全退出時如何清空Session或Cookie,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
概覽:
網站中點擊退出,如果僅僅是重定向到登錄/出頁面,此時在瀏覽器地址欄中輸入登錄后的某個頁面地址如主頁,你會發現不用登錄就能訪問。這種所謂的退出并不是安全的。
那么怎樣做到安全退出呢?
那就是點擊退出后清空相應的Session或Cookie。
清空Session的代碼:
Session.Clear(); Session.Abandon();
清除Cookie的正確代碼(假設Cookie名稱為UserInfo):
if (Request.Cookies["UserInfo"] != null) { Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1); }
如果需要清除所有Cookie,則遍歷:
for (int i = 0; i <Response.Cookies.Count; i++) { Response.Cookies[i].Expires = DateTime.Now.AddDays(-1); }
清除Cookie的錯誤代碼(假設Cookie名稱為UserInfo):
if (Request.Cookies["UserInfo"] != null) { Response.Cookies.Remove("UserInfo"); }
你會發現,這樣處理后,Cookie依然存在,為什么就是刪不掉呢?我們去看看.NET的HttpCookieCollection實現源碼:
public void Remove(string name) { if (this._response != null) { this._response.BeforeCookieCollectionChange(); } this.RemoveCookie(name); if (this._response != null) { this._response.OnCookieCollectionChange(); } }
這個操作在HttpCookieCollection這個集合里面刪除了cookie,當服務器將數據傳輸到客戶端的時候,不會包含這個已經在服務端刪除了的Cookie的任何信息,瀏覽器也就不會對它做任何改變(remove方法只是不讓服務器向客戶機發送那個被刪除的cookie,與此cookie留不留在客戶機里無關)。所以cookie刪除不掉的情況就出現。
既然Response.Cookies.Remove沒有辦法實現我們需要的效果,為什么微軟還有留著呢,因為CookieCollection實現ICollection接口,romove是必須實現的方法,盡管它沒多大的實際價值。而集合的romove也應該是這樣的實現方式,只不過微軟在寫MSDN的時候,描述得太不清楚了,給我們造成了不小的麻煩。
下面就總結下實現安全退出的幾種方式:
1).用Linkbutton,Button等服務器控件實現退出
這種方式最好處理:直接在服務器控件對應的事件里編寫清空Session或Cookie的代碼即可。
2).用<a>注銷</a>等HTML標記實現退出
對于<a></a>這個特殊標記,可以這樣實現: <a href="logout.aspx">注銷</a>
,在logout.aspx的Page_Load事件中編寫清空Session或Cookie的代碼即可。
對于<a></a>等HTML標記,可以在HTML標記的相應client事件中用Js-Ajax,或者jQuery-Ajax,在一般處理程序(.ashx)中編寫清空Session或Cookie的代碼即可。
對于<a></a>等HTML標記,還可以這樣:在當前頁面添加一個服務器控件如Button,用div包含,并讓其隱藏(注意:隱藏不可見,不能通過服務器屬性Visible=False,只能通過設置div的display:none;來實現),在Button的服務器事件Cilck里編寫清空Session或Cookie的代碼;然后在HTML標記的相應client事件中用Js或者jQuery調用Button控件的Click事件即可(通過服務器屬性Visible=False設置Button隱藏,Js或者jQuery調用Button控件的Click事件將失效)。
以上是“Asp.net中安全退出時如何清空Session或Cookie”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。