原文:https://www.cnblogs.com/zhang1999/p/7278020.html
登陸頁面使用Session存儲驗證碼,導致會話產生SessionId,從而導致會話固定,登陸后用來存儲用戶信息的SessionId不變,容易被利用
//強行銷毀當前用戶的所有會話內容,但是只有加載頁面的時候有效,導致登陸后沒有用戶信息 HttpContext.Current.Session.Abandon() HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""))
改用Cookie存儲
1.Cookie對象
(1).寫入Cookie對象
HttpCookie cookie = new HttpCookie("data"); 注:定義cookie,name屬性為data。
cookie.Values.Add("name","123"); 注:cookie是以鍵值對的方式存儲。
cookie.Expires = DateTime.Now.AddYears(2); 注:過期時間設置為2年,也可以不設置過期時間,如果不設置cookie在瀏覽器關閉是自動清除。
Response.Cookies.Add(cookie); 注:寫入Response對象。
(2).讀取Cookie對象
HttpCookie cookie = Request.Cookies["data"]; 注:獲取name屬性為data的cookie
if(cookies !=null &&Cookies.HasKeys) 注:判斷cookie是否存在
{
string s = cookies["name"]; 注:根據name鍵獲取值
Response.Write(s);
}
2.Session對象
Session的定義和讀取相對比Cookie容易
(1).定義Session對象
Session["Itemsession"] = "abc"; 注:Session的值為"abc",Session的類型是object所以可以賦任何類型。
(2).讀取Session對象
string s =(string)Session["Itemsession"] ; 注:讀取時的類型,要和定義時的類型一致。
Response.Write(s);
(3).Session特點
同一台電腦的同一個瀏覽器表示同一次會話,不同的瀏覽器表示不同的會話。
同一台電腦的同一個瀏覽器只能有一個Session。
Session的過期時間是在瀏覽器關閉時自動清除或用戶不進行任何活動20分鍾Session也會自動清除。
3.Cookie和Session的不同點和相同點
(1).相同點
Cookie對象和Session對象作用是在窗體之間傳值。
等等
(2).不同點
Cookie將狀態保存在客戶端,Session將狀態保存在服務器端。
Session相對Cookie,Session的安全性更高。