服務熱線
153 8323 9821
為什么點擊安全退出就退出不了呢?只有關閉瀏覽器才能退出,郁悶!一般不就是清除COOKIES、SESSION什么的嗎?這誰都知道!新了解User.Identity.Name。
頁面代碼:
if (!this.IsPostBack)
{
//判斷用戶是否登錄
if (Session["UserGrade"]==null)
Session["UserGrade"]=DBOperate.GetUserGrade(User.Identity.Name);
Lbl_UserGrade.Text="用戶級別:"+ Session["UserGrade"].ToString();
if ((User.Identity.Name==null)||(User.Identity.Name==""))
{
Lbl_UserName.Text="當前用戶:過客";
}
else
{
Lbl_UserName.Text="當前用戶:"+User.Identity.Name.ToString();
}
}
安全退出按鈕代碼:
FormsAuthentication.SignOut();
Session.Abandon();
Session.Clear();
Response.Cookies.Clear();
Response.Buffer = true;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.Redirect("default.aspx");
再怎么寫,點擊都退出不了,除了關閉瀏覽器;這怎么改?不可能說安全退出就要關閉瀏覽器才行吧?
回答:
我不推薦用session來保持狀態,它的好處不說了,不好的地方我說說;
一,它是會話級的變量,當前會話結束,就消失了,不能永久保留信息,如購物車中的用戶查閱商品的情況,這些信息沒有什么安全性方面的考慮,為了用戶方便,最好長時間保留下來;
二、占用內存資源;你用人家的服務器,人家不會讓你太占用資源的;
三、當采用web園時,或webfarm時,會出一些問題,這個我解釋一下,當你的網站流量大時,你不得不采用多臺服務器,用來負載平衡,舉例,當我登錄時,我的請求分配到了第一服務器,登錄完,session生成了,當我操作時,我的請求到了第一服務器,結果它太忙了,就把我分到了第二臺服務器,第二臺服務器的內存中有我的session嗎?沒有,于是,系統認為我沒有登錄,暈死吧;
我建議用cookies,各大網站也是采用它來保持狀態的,當然,它有安全問題,在創建cookies時,最好采用加密手段,這個我就不說了;
如果安全性要求很高,像銀行系統,那就得下載個插件到客戶端了;session也靠不住的。
cookies的工作原理和session差不多,操作方式也差不多,不同是cookies的值存在客戶端,而session的值是存在服務器端;但是,它們都有一個鍵值在客戶端,這是沒有辦法的事情,否則像sesion,當用戶登錄后,如果客戶沒有留一點兒信息,服務器根本不會知道請求來自哪里。
我建議采用cookies來保持狀態,這也是我的習慣。cookies的時效可以設很長,或是直到永遠,呵呵,