2010-10-08 49 views
4

我想實現註銷功能在ASP.NET MVC ASP.NET MVC應用程序註銷。無法使用FormsAuthentication.SignOut()

我使用窗體身份驗證爲我的項目。

這是我的退出代碼:

FormsAuthentication.SignOut(); 
Response.Cookies.Clear(); 
FormsAuthenticationTicket ticket = 
    new FormsAuthenticationTicket(
     1, 
     FormsAuthentication.FormsCookieName, 
     DateTime.Today.AddYears(-1), 
     DateTime.Today.AddYears(-2), 
     true, 
     string.Empty); 

Response.Cookies[FormsAuthentication.FormsCookieName].Value = 
      FormsAuthentication.Encrypt(ticket); 
Response.Cookies[FormsAuthentication.FormsCookieName].Expires = 
      DateTime.Today.AddYears(-2); 

return Redirect("LogOn"); 

該代碼將用戶重定向到登錄屏幕。但是,如果我通過在地址欄中指定名稱來調用操作方法(或者從地址欄下拉列表中選擇以前的鏈接),我仍然可以在不登錄的情況下訪問安全頁面。

有人可以幫我解決問題?

+0

? – Aliostad 2010-10-08 09:55:59

+0

@Aliostad:現在改變了源代碼,以前方法調用被封裝了。 – vijaysylvester 2010-10-08 10:04:46

+0

@vijaysylvester - 請給我們一些關於如何確保您的安全頁面安全的細節? – Venemo 2010-10-08 10:20:36

回答

6

真奇怪......我做一個單一的呼叫:FormsAuthentication.SignOut();它的工作原理...

public ActionResult Logout() { 
    FormsAuthentication.SignOut(); 
    return Redirect("~/"); 
} 
+0

我用反射器,看到了什麼FormsAuth。SignOut()正在做。它做了同樣的事情,我試圖完成。即將cookie的expires屬性設置爲上一個日期。但它小心地將cookie添加到回覆中,但我確實這樣做了,這是此處的問題。謝謝您的幫助! – vijaysylvester 2010-10-15 01:33:21

1

要正確回答你的問題,我必須知道你如何保護你的「安全」頁面。
我懷疑你正在做的事情錯了。

FormsAuthentication.SignOut()一個簡單的調用應該是足夠的,因爲它清除驗證cookie,從而使其他的方法調用,你要在那裏多餘的。

在ASP.NET MVC,你必須使用AuthorizeAttribute上的操作方法來禁止未經身份驗證的訪客來使用它。 (意思是:舊的方式,你在Web.config不再與MVC可與Web窗體做到了指定位置的標記。)

例如,這裏是從我ForumController類一小段代碼:

public class ForumController : Controller 
{ 
    ... 

    [Authorize] 
    public ActionResult CreateReply(int topicId) 
    { 
     ... 
    } 

    ... 
} 
+0

要清楚,即使您使用SignOut()在服務器端清除cookie,客戶端也會在下一個請求中傳遞Forms Auth Cookie。爲了防止這種情況,我添加了一個具有相同名稱但時間已過的cookie。 – vijaysylvester 2010-10-08 10:08:39

+0

@vijaysylvester - 那麼,你如何解釋它對我和@Palantir有效? – Venemo 2010-10-08 10:19:04

+0

@vijaysylvester - 你是正確的,cookie仍然會被髮送(直到它過期),但它不會很重要,因爲這個cookie將被視爲ASP.NET的「陳舊」。還有其他一些步驟可以加強這一點,例如絕對過期和SSL - 但添加具有相同名稱的cookie的「黑客行爲」並不是其中的一種。我不認爲FormsAuth是這裏的問題。 – RPM1984 2010-10-08 10:24:47