我使用了来自http://www.codeproject.com/KB/aspnet/SingleSignon.aspx
的单点登录演示我为此演示添加了一个SignOut函数,但发现了一个问题:
当我设置cookie.Domain时,FormsAuthentication.SignOut()不起作用,并且无法清除cookie。
如果cookie尚未设置cookie.Domain,则FormsAuthentication.SignOut()可以正常工作。
我使用的是C#asp.net。
有人能用asp.net告诉我一些简单实用的单点登录和单点登录解决方案吗?
答案 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());
}