在不使用内置成员身份功能时,使用FormsAuthentication.SignOut是否有意义

时间:2013-03-19 11:07:39

标签: c# asp.net login

在我的Web应用程序中,我使用完全自定义的功能进行登录。所以,Web.Security没有任何内容。
我使用Session和ViewState变量控制所有内容。 要从应用程序注销,我使用Session.Abandon()命令。

我想知道我是否也应该调用FormsAuthentication.SignOut()?我看了一下这个方法的官方文档,但是没有完全理解它。我从中获取了什么好处?

4 个答案:

答案 0 :(得分:3)

如果您仍在使用表单身份验证(即使您没有使用内置的ASP.NET成员资格提供程序),那么您应该调用SignOut,因为它将删除身份验证Cookie

但是,如果你甚至根本不使用表单身份验证,那么就没有身份验证cookie,因此调用它是没有意义的。

答案 1 :(得分:3)

我必须承认官方文档在SignOut上有很多话要说。备注部分包含许多有趣的信息。

  

如果CookiesSupported为false,SignOut方法将从cookie或URL中删除表单身份验证票证信息。您可以将SignOut方法与RedirectToLoginPage方法结合使用,将一个用户注销,并允许其他用户登录。   如果您只在无cookie模式下运行,或者如果您同时支持经过身份验证的用户和匿名用户,那么如果由于删除匿名标识符而需要执行特殊业务逻辑,则应明确控制重定向到登录页面。   调用SignOut方法时,通过调用Redirect方法并将endResponse参数设置为false来重定向到应用程序的登录页面。在当前页面执行完毕之前,重定向不会发生,因此可以运行其他代码。如果代码不包含显式重定向到另一个页面,则会将用户重定向到应用程序配置文件中配置的登录页面。

     

调用SignOut方法只会删除表单身份验证Cookie。 Web服务器不存储有效和过期的身份验证票证以供以后进行比较。如果恶意用户获得有效的表单身份验证cookie,这会使您的站点容易受到重播攻击。要在使用表单身份验证cookie时提高安全性,您应该执行以下操作:

     
      
  • 通过将SlidingExpiration属性设置为false,对表单身份验证Cookie使用绝对过期。这限制了可以重放被劫持cookie的窗口。
  •   
  • 通过将RequireSSL属性设置为true并在SSL下运行整个网站,仅通过安全套接字层(SSL)发出并接受身份验证Cookie。将RequireSSL属性设置为true可确保ASP.NET永远不会通过非SSL连接向浏览器发送身份验证cookie。但是,客户端可能不会遵守cookie上的安全设置。这意味着客户端可能会通过非SSL连接发送表单身份验证cookie,从而使其容易受到劫持。您可以通过在SSL下运行整个网站来阻止客户端以明文形式发送表单身份验证cookie。
  •   
  • 使用服务器上的持久存储来记录用户何时退出网站,然后使用应用程序事件(如PostAuthenticateRequest事件)来确定当前用户是否使用表单身份验证进行身份验证。如果用户使用表单身份验证进行身份验证,并且持久存储中的信息指示用户已注销,请立即清除身份验证cookie并将浏览器重定向回登录页面。成功登录后,更新存储以反映用户已登录。使用此方法时,应用程序必须跟踪用户的登录状态,并且必须强制空闲用户注销。
  •   

你可以看到它here

所以,总而言之,是的,你应该致电SignOut

答案 2 :(得分:2)

您无需使用

FormsAuthentication.SignOut();

如果您不使用表单身份验证。
这是一个很好的链接
FormsAuthentication.SignOut() does not log the user out

答案 3 :(得分:-1)

您可以使用Membership provider来缩短管理安全需求的开发时间(Identity)

您还需要tool regsql才能为您的用户安装自己的数据库,还有RoleManager functionality用于管理Roles用户(Principal)

一些链接:

http://msdn.microsoft.com/fr-fr/library/ms229862(v=vs.80).aspx