单点登录SignOut问题:FormsAuthentication.SignOut()无法正常工作

时间:2009-11-10 12:19:43

标签: asp.net authentication

我使用了来自http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

的单点登录演示

我为此演示添加了一个SignOut函数,但发现了一个问题:

当我设置cookie.Domain时,FormsAuthentication.SignOut()不起作用,并且无法清除cookie。

如果cookie尚未设置cookie.Domain,则FormsAuthentication.SignOut()可以正常工作。

我使用的是C#asp.net。

有人能用asp.net告诉我一些简单实用的单点登录和单点登录解决方案吗?

3 个答案:

答案 0 :(得分:4)

如果您对同一域和子域使用身份验证,请尝试在web.config中添加域名,而不是通过代码添加域。如果您使用此web.config条目

,则无需编写任何代码
<authentication mode="Forms">

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

</authentication>

此条目告诉asp.net引擎,身份验证cookie将用于abc.com的所有子域。尝试使用它,看看它是否有效。

答案 1 :(得分:1)

这对我有用:

在每个站点的Logout事件/方法中,使用Request对象&amp;中的Cookies集合。删除相关的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名称。

答案 2 :(得分: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());
    }