FormsAuthentication.SignOut 方法

定义

从浏览器删除 Forms 身份验证票证。

public:
 static void SignOut();
public static void SignOut ();
static member SignOut : unit -> unit
Public Shared Sub SignOut ()

示例

下面的代码示例使用 SignOut 方法清除 forms-authentication Cookie,并使用 方法将用户重定向到登录页 RedirectToLoginPage

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

public void LoginLink_OnClick(object sender, EventArgs args)
{
  FormsAuthentication.SignOut();
  FormsAuthentication.RedirectToLoginPage();
}

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>

<form id="form1" runat="server">
Welcome <b><%=User.Identity.Name%></b>. Not <b><%=User.Identity.Name%></b>? 
Click <asp:LinkButton id="LoginLink" Text="here" 
                      OnClick="LoginLink_OnClick" runat="server" />
to sign in.

<!-- Page Contents -->

</form>



</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Web.Security" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

Public Sub LoginLink_OnClick(sender As Object, args As EventArgs)
  FormsAuthentication.SignOut()
  FormsAuthentication.RedirectToLoginPage()
End Sub

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>

<form id="form1" runat="server">
Welcome <b><%=User.Identity.Name%></b>. Not <b><%=User.Identity.Name%></b>? 
Click <asp:LinkButton id="LoginLink" Text="here" 
                      OnClick="LoginLink_OnClick" runat="server" />
to sign in.

<!-- Page Contents -->

</form>



</body>
</html>

注解

方法 SignOut 从 Cookie 或 URL 中删除 forms-authentication 票证信息(如果 CookiesSupportedfalse)。 可以将 SignOut 方法与 RedirectToLoginPage 方法结合使用,以注销一个用户并允许其他用户登录。

如果以无 Cookie 模式以独占方式运行,或者如果同时支持经过身份验证的用户和匿名用户,则删除匿名标识符后需要执行特殊业务逻辑时,应显式控制对登录页的重定向。

SignOut调用 方法时,通过将 参数设置为 false来调用 Redirect 方法endResponse,重定向到应用程序的登录页。 重定向在当前页完成执行之前不会发生,因此可以运行其他代码。 如果代码不包含到另一个页面的显式重定向,则用户将重定向到在应用程序的配置文件中配置的登录页。

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

  • 通过将 属性false设置为 SlidingExpiration ,对表单身份验证 Cookie 使用绝对过期。 这限制了可重播被劫持 Cookie 的窗口。

  • 仅通过安全套接字层 (SSL) 颁发和接受身份验证 Cookie,方法是将 属性设置为 RequireSSLtrue ,并在 SSL 下运行整个网站。 RequireSSL将 属性设置为 true 可确保 ASP.NET 永远不会通过非 SSL 连接向浏览器发送身份验证 Cookie;但是,客户端可能不会遵循 Cookie 上的安全设置。 这意味着客户端可能会通过非 SSL 连接发送表单身份验证 Cookie,从而使它容易受到劫持。 可以通过在 SSL 下运行整个网站,阻止客户端以明文形式发送表单身份验证 Cookie。

  • 在服务器上使用永久性存储来记录用户何时注销网站,然后使用应用程序事件(例如 PostAuthenticateRequest 事件)来确定当前用户是否已使用 Forms 身份验证进行身份验证。 如果用户已通过表单身份验证进行身份验证,并且永久性存储中的信息指示用户已注销,请立即清除身份验证 Cookie 并将浏览器重定向回登录页。 成功登录后,更新存储以反映用户已登录。 使用此方法时,应用程序必须跟踪用户的登录状态,并且必须强制空闲用户注销。

适用于

另请参阅