一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.net中安全退出時清空Session或Cookie的實例代碼

Asp.net中安全退出時清空Session或Cookie的實例代碼

2020-04-06 12:12小離子 ASP.NET教程

網站中點擊退出,如果僅僅是重定向到登錄/出頁面,此時在瀏覽器地址欄中輸入登錄后的某個頁面地址如主頁,你會發現不用登錄就能訪問,這種退出并不安全了,下面通過本文給大家介紹安全退出時清空Session或Cookie的實例代碼

概覽:

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

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

那就是點擊退出后清空相應的Session或Cookie。

清空Session的代碼:

?
1
2
Session.Clear();
Session.Abandon();

清除Cookie的正確代碼(假設Cookie名稱為UserInfo):

?
1
2
3
4
if (Request.Cookies["UserInfo"] != null)
{
Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
}

如果需要清除所有Cookie,則遍歷:

?
1
2
3
4
for (int i = 0; i <Response.Cookies.Count; i++)
{
Response.Cookies[i].Expires = DateTime.Now.AddDays(-1);
}

清除Cookie的錯誤代碼(假設Cookie名稱為UserInfo):

?
1
2
3
4
if (Request.Cookies["UserInfo"] != null)
{
Response.Cookies.Remove("UserInfo");
}

你會發現,這樣處理后,Cookie依然存在,為什么就是刪不掉呢?我們去看看.NET的HttpCookieCollection實現源碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
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的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.cnblogs.com/Scl891004X/archive/2016/11/29/6114034.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九九九九热 | 男人天堂网av| 亚洲品质自拍视频 | 日本福利片国产午夜久久 | 色v在线| 黑人破中国女人处 | 美女林柏欣21p人体之仓之梦 | a毛片在线免费观看 | 皇上好大好硬好涨好深好爽 | 亚洲国产成人久久综合一区77 | www亚洲国产 | 国产在线91| 免费观看日本人成影片 | 精品久久久久中文字幕日本 | 国色天香视频完整版 | 色噜噜亚洲男人的天堂www | 韩国禁片在线观看久 | 亚洲码和乱人伦中文一区 | 99国产精品热久久久久久夜夜嗨 | 成人免费公开视频 | 欧美高清日韩 | 天天看黄| hd最新国产人妖ts视频 | 爽好舒服使劲添高h视频 | 日韩精品视频美在线精品视频 | 污小说h| 荡娃艳妇有声小说 | 免费看男女做好爽好硬视频 | 国产成人欧美 | 99热这里只有精品国产在热久久 | 亚洲国产精品高清在线 | 五月最新商场女厕所高跟嘘嘘 | 四虎4hu永久免费国产精品 | 精品国产一级在线观看 | 国产91素人搭讪系列天堂 | 91视频国产精品 | 五月天黄网 | 激情婷婷成人亚洲综合 | 性欧美高清强烈性视频 | 狠狠婷婷综合缴情亚洲 | 白丝美女同人18漫画 |