2009-11-10 19 views
6

我使用單點登錄演示來源:單點登錄SignOut問題:FormsAuthentication.SignOut()不工作

我添加SignOut功能本演示中,卻發現了一個問題:

當我設置cookie.Domain,FormsAuthentication.SignOut()不工作,該cookie不能被清除。

如果cookie尚未設置cookie.Domain,FormsAuthentication.SignOut()的作品。

我用C#asp.net。

而且可能有人使用asp.net告訴我一些簡單實用的單點登錄和單點登錄解決方案熄滅?

回答

4

如果您正在使用相同的域和子域的認證,嘗試在web.config中添加域名,而不是通過代碼添加域。你不會有任何代碼,如果你使用這個web.config文件條目

<authentication mode="Forms"> 

    <forms loginUrl="~/Account/LogOn" timeout="2880" domain="abc.com"/> 

</authentication> 

此項告訴身份驗證cookie將被用於爲abc.com的所有子域的asp.net引擎。嘗試使用這個,看看它是否工作。

+0

是的,它完美。非常感謝你。 – Mike108 2009-11-10 13:25:33

1

這爲我工作:

在每個站點的退出事件/方法,使用Cookies集合在Request對象&刪除相關的cookie如下:

enter code hereHttpCookie cookie = Request.Cookies.Get(".CommonCookieName"); 
cookie.Expires = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Cookies.Add(cookie); 

如果SSO所有站點使用相同的cookie,那麼這很簡單,如上所述。 如果幾個或每個站點參與SSO使用同一主體(人)他們自己的Cookie /用戶名,然後ü需要刪除所有cookie。 (也許只是在網站的SSO集的每個網站的用戶名& cookie名稱映射建立一箇中央位置。

+0

感謝您的選擇 - 這是我在一個使用DotNetOpenAuth的OpenID網站上所需要的, – 2010-02-26 16:47:47

0

這對我的作品

public virtual ActionResult LogOff() 
    { 
     FormsAuthentication.SignOut(); 
     foreach (var cookie in Request.Cookies.AllKeys) 
     { 
      Request.Cookies.Remove(cookie); 
     } 
     foreach (var cookie in Response.Cookies.AllKeys) 
     { 
      Response.Cookies.Remove(cookie); 
     } 
     return RedirectToAction(MVC.Home.Index()); 
    } 
+0

這沒有任何意義,當您按下該方法(例如註銷您的網站)時,您銷燬所有Cookie用戶的個人電腦,而不僅僅是與您的網站有關的個人電腦 – RPM1984 2011-10-18 02:19:14

+1

@ RPM1984瀏覽器不應允許您刪除由其他網站創建的Cookie。 – 2011-10-19 18:11:45

+0

@Aros - 好吧,它「不應該」,但爲什麼要採取這種改變?另外如果你的網站有「其他」cookies?它也會把它們吹走。註銷只應銷燬身份驗證Cookie。 – RPM1984 2011-10-19 22:59:24