Asp.net中安全退出時清空Session或Cookie的執行個體代碼

來源:互聯網
上載者:User
概覽:

網站中點擊退出,如果僅僅是重新導向到登入/出頁面,此時在瀏覽器地址欄中輸入登入後的某個頁面地址如首頁,你會發現不用登入就能訪問。這種所謂的退出並不是安全的。

那麼怎樣做到安全退出呢?

那就是點擊退出後清空相應的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事件將失效)。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.