2

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

我想知道我是否也应该调用FormsAuthentication.SignOut()?我看了一下这个方法的官方文档,但不太明白。我从中得到什么好处?

4

4 回答 4

3

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

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

于 2013-03-19T11:12:17.903 回答
3

不得不承认官方文档有很多话要说SignOut。备注部分包含很多有趣的信息。

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

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

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

你可以在这里看到

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

于 2013-03-19T11:16:58.933 回答
2

你不需要使用

FormsAuthentication.SignOut();

如果您不使用表单身份验证。
这是一个很好的链接
FormsAuthentication.SignOut() 不会注销用户

于 2013-03-19T11:11:52.303 回答
-1

您可以使用Membership provider以减少开发时间来满足管理安全的需要(Identity)

您还必须tool regsql为您的用户安装您的数据库,您还RoleManager functionality需要管理Roles用户(Principal)

一些链接:

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

于 2013-03-19T11:11:26.600 回答