2009-08-11 50 views
0

我正在使用formAuthentication和以下Web.Config文件。完成FormsAuthentication.SignOut()後,用戶無法再次登錄

<authentication mode="Forms"> 
    <forms name="SnowBall" timeout="30" slidingExpiration="true" loginUrl="Login.aspx"  cookieless="AutoDetect"> 
    </forms> 
</authentication> 
<authorization> 
    <deny users="?"/> 
</authorization> 

我有一個用戶控件,它有一個LogOut按鈕。註銷按鈕的代碼是:

FormsAuthentication.SignOut(); 
Response.Redirect("Login.aspx"); 

執行此代碼後,我不再能夠驗證用戶。當我點擊「登錄」時,頁面刷新並且事件處理程序不執行。

當我關閉瀏覽器窗口並重新運行網站時,一切正常。請幫幫我。

+0

可能是愚蠢的問題: - 做客戶端的時鐘是否正確? - 你有登錄後用戶重定向頁面的緩存設置嗎? – Dewfy 2009-08-11 07:41:03

+0

nopes,沒有緩存設置。 – Rohit 2009-08-11 07:43:01

+0

第二次登錄後使用Fiddler檢查身份驗證cookie,如果存在,則一切正常。否則,你在服務器代碼中有一些問題。 – Dewfy 2009-08-11 07:45:17

回答

0

我發現它有助於有人在那裏solution.Hope

問題在於這條線

Response.Redirect("Login.aspx"); 

它所做的是重定向用戶與RETURNURL爲querystring.For如對login.aspx的。

Login.aspx?ReturnUrl =「註銷發生的頁面名稱」;

現在發生的事情是FormsAuthentication.GetRedirectUrl()保留了這個querystring路徑,並且在認證被重定向到這個路徑之後,我放入的用戶憑證沒有被授權查看這個頁面。所以我總是在登錄屏幕上。

要解決此問題,請更換

Response.Redirect("Login.aspx"); 

隨着

Response.Redirect(FormsAuthentication.LoginUrl); 
+0

FormsAuthentication.RedirectToLoginPage()更加整潔。你應該在你的Web.config中設置一個defaultUrl屬性,例如 RichardOD 2009-08-11 12:05:42

+0

不,我沒有在這裏設置defaultUrl。我遇到與FormsAuthentication.RedirectToLoginPage()相同的問題。 – Rohit 2009-08-11 12:07:40

0

首先,您需要清除存在兩個單獨的ID,一個是會話ID,用於瀏覽器會話,另一個是表單身份驗證Cookie,它是加密的字母數字ID。

每當您使用formauthentication.signout時,您的身份驗證Cookie將根據您的實現進行刪除。但會話ID將保留在那裏。

你可以通過使用fiddler/firefox瀏覽器來檢查它。

相關問題