2012-04-26 54 views
1

我想問一下關於註銷後失去了本屆會議:會議在ASP.Net(C#)在Firefox和Chrome

我寫的代碼,但它僅在Internet Explorer中的工作,而不是在Mozilla Firefox或谷歌鉻。在這兩種瀏覽器中,如果我點擊後退按鈕進行註銷,則會返回用戶的帳戶。

註銷頁面代碼(在頁面加載) -

FormsAuthentication.SignOut(); 
Session.Abandon(); 
Session["CustomerId"] = null; 
FormsAuthentication.RedirectToLoginPage(); 

在其他每一頁或主PAGE-

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
if (Session["CustomerId"] == null) 
{ 
    Response.Redirect("~/Login.aspx"); 
} 

在web的配置文件 -

<authentication mode="Forms"> 
    <forms name="MyCookie" loginUrl="Login.aspx" protection="All" timeout="90" slidingExpiration="true"></forms> 
</authentication> 
+1

但是你還在登錄嗎?如果你點擊後退按鈕,瀏覽器可能會返回一個緩存頁面。如果您嘗試使用Ctrl + F5重新加載頁面,您是否仍然登錄? – sirrocco 2012-04-26 10:45:38

回答

3

如果你按回來,即使用戶註銷,你仍然可以看到用戶信息,是因爲你沒有照顧緩存瀏覽器,所以該網頁未被瀏覽器緩存。

要你不希望留在瀏覽器緩存,你需要設置的所有頁面:

CurrentPage.Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-4)); 
CurrentPage.Response.Cache.SetValidUntilExpires(false); 
CurrentPage.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
CurrentPage.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
CurrentPage.Response.Cache.SetNoStore(); 
CurrentPage.Response.ExpiresAbsolute = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0)); 
CurrentPage.Response.Expires = 0; 
CurrentPage.Response.CacheControl = "no-cache"; 
CurrentPage.Response.AppendHeader("Pragma", "no-cache"); 
CurrentPage.Response.Cache.AppendCacheExtension("must-revalidate, proxy-revalidate, post-check=0, pre-check=0"); 

既然IE不保存數據,以及其他讓他們的理由是因爲安裝的每個瀏覽器選擇工作,或者你已經設置。這裏的要點是,如果您想避免將此數據保存在瀏覽器緩存中,則必須擁有該控件並且不要讓瀏覽器使用默認設置。

單獨使用HttpCacheability.NoCache也許足夠用於一個瀏覽器,但對於所有瀏覽器來說都不夠。此外,它更好地使用SSL,因爲此頁面可能會被代理緩存在路上...

1

您需要檢查Page_init()事件上的用戶會話。如果會話爲空,則將用戶重定向到登錄頁面。所以如果你註銷然後嘗試點擊後退按鈕,那麼系統會將用戶重定向到登錄頁面而不是該用戶帳戶。

這是事件,你需要檢查用戶會話,

protected void Page_init(object sender, EventArgs e) 
    { 
     if (Session["User"] == null) 
     { 
      Response.Redirect("Login.aspx"); 
     } 
    } 

希望這會幫助你。 謝謝。