C# 在不使用内置成员资格功能时,使用FormsAuthentication.SignOut是否有意义

C# 在不使用内置成员资格功能时,使用FormsAuthentication.SignOut是否有意义,c#,asp.net,login,C#,Asp.net,Login,在我的web应用程序中,我使用完全自定义的登录功能。因此,web.Security中没有任何内容。我通过会话和视图状态变量控制一切。 要从应用程序注销,我使用Session.about()命令 我想知道我是否也应该调用FormsAuthentication.SignOut()?我查看了此方法的官方文档,但没有完全了解。我从中得到了什么好处?您可以使用成员资格提供程序,以减少管理安全需求的开发时间(身份) 您还拥有工具regsql以便为您的用户安装您的数据库,您还拥有角色管理器功能用于管理用户的角

在我的web应用程序中,我使用完全自定义的登录功能。因此,web.Security中没有任何内容。
我通过会话和视图状态变量控制一切。 要从应用程序注销,我使用
Session.about()
命令


我想知道我是否也应该调用FormsAuthentication.SignOut()?我查看了此方法的官方文档,但没有完全了解。我从中得到了什么好处?

您可以使用
成员资格提供程序
,以减少管理安全需求的开发时间
(身份)

您还拥有
工具regsql
以便为您的用户安装您的数据库,您还拥有
角色管理器功能
用于管理
用户的角色
(主体)

一些链接:

您不需要使用

FormsAuthentication.SignOut();
如果您没有使用表单身份验证。
这里有一个很好的链接

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


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

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

如果CookieSupported为false,则SignOut方法将从cookie或URL中删除表单身份验证票证信息。您可以将SignOut方法与RedirectToLoginPage方法结合使用,以注销一个用户,并允许其他用户登录。 如果您以无cookieless模式独占运行,或者如果您同时支持经过身份验证的用户和匿名用户,那么如果由于删除匿名标识符而需要执行特殊的业务逻辑,则应该显式控制重定向到登录页面。 调用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并将浏览器重定向回登录页面。成功登录后,更新存储以反映用户已登录。使用此方法时,应用程序必须跟踪用户的登录状态,并且必须强制空闲用户注销
你可以看到


所以,总而言之,是的,你应该调用
注销

,虽然我同意你发布的这个链接,但我不同意使用的方法,因为这是一个时间问题,而且注销的做法仍然应该使用。@Shekar,我也不明白,当你的答案清楚地回答了我的问题时,为什么会有人否决你的答案。