2008-09-10 54 views
3

我有一个主要的asp.net应用程序,它是用asp.net 1.1编写的。在应用程序下面运行几个2.0应用程序。要完全注销用户,我只需使用FormsAuthentication.SignOut注销1.1应用程序,还是比这更复杂?如何注销多个asp.net应用程序?

回答

5

你要做的就是所谓的单点登录和单点登录。根据您如何设置应用程序而有所不同。我将尝试澄清这些差异的起因。

要实现单点登录和单点登录,您需要使所有应用程序的cookie名称,保护和路径属性保持一致。

<authentication mode="Forms"> 
    <forms name=".cookiename" 
      loginUrl="~/Login.aspx" 
      timeout="30" 
      path="/" /> 
</authentication> 

接下来,您需要添加机器密钥,并且它们需要在所有应用程序之间保持一致。

<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902" 
      encryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC" 
      validation="SHA1" /> 

您对应用程序使用二级或三级域名吗?如果是这样你需要做一点点加入域到cookie:

protected void Login(string userName, string password) 
{ 
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False); 
    cookie.Domain = "domain1.com"; 
    cookie.Expires = DateTime.Now.AddDays(30); 
    Response.AppendCookie(cookie); 
} 

现在做单点登录了起来,叫FormsAuthentication.SignOut可能是不够的。下一个最好的办法是将cookie过期设置为过去的日期。这将确保cookie不会再次用于身份验证。

protected void Logout(string userName) 
{ 
    System.Web.HttpCookie cookie = FormsAuthentication.GetAuthCookie(userName, False); 
    cookie.Domain = "domain1.com"; 
    cookie.Expires = DateTime.Now.AddDays(-1); 
    Response.AppendCookie(cookie); 
} 

我在考虑您对所有应用程序使用相同的数据库。如果应用程序使用单独的数据库进行注册和身份验证,那么我们需要做更多的事情。只要让我知道如果是这样的话。否则这应该适合你。在Request对象

在注销事件,而不是FormsAuthentication.GetAuthCookie方法使用Cookies集合如下:

+0

“现在做单点登录了起来,叫FormsAuthentication.SignOut可能是不够的”,您可以指定为什么这是不够的? – 2016-06-16 12:47:27

0

如果您拥有适用于所有应用程序的中央会话存储区,则可能会更容易。然后,您可以在一个地方将会话设置为空。

0

这为我工作

HttpCookie cookie = Request.Cookies.Get(otherSiteCookieName); 
cookie.Expires = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Cookies.Add(cookie); 

Ofcourse,这需要你知道的cookie名称您希望用户注销的站点 - 但如果您在所有Web应用程序中使用相同的cookie,则这不会成为问题。

0

我更喜欢使用的web.config

<authentication mode="Forms"> 
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" /> 
</authentication> 
相关问题