次の方法で共有


FormsAuthentication.SignOut メソッド

定義

ブラウザーからフォーム認証チケットを削除します。

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

次のコード例では、 メソッドを使用してフォーム認証 Cookie を SignOut クリアし、 メソッドを使用してユーザーをログイン ページに 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、 が の場合CookiesSupportedfalse、Cookie または URL からフォーム認証チケット情報を削除します。 メソッドを SignOut メソッドと組み合わせて使用すると、1 人の RedirectToLoginPage ユーザーをログアウトさせ、別のユーザーがログインできるようにします。

Cookie レス モードで排他的に実行する場合、または認証されたユーザーと匿名ユーザーの両方をサポートする場合は、匿名識別子を削除した結果として実行する特別なビジネス ロジックが必要な場合は、ログイン ページへのリダイレクトを明示的に制御する必要があります。

メソッドがSignOut呼び出されると、 パラメーターが に設定された メソッドをRedirect呼び出すことによって、アプリケーションのログイン ページへのfalseリダイレクトがendResponse行われます。 リダイレクトは、現在のページの実行が完了するまで実行されないため、追加のコードを実行できます。 コードに別のページへの明示的なリダイレクトが含まれていない場合、ユーザーはアプリケーションの構成ファイルで構成されたログイン ページにリダイレクトされます。

メソッドを SignOut 呼び出すと、フォーム認証 Cookie のみが削除されます。 Web サーバーは、後で比較するために有効な認証チケットと有効期限切れの認証チケットを格納しません。 これにより、悪意のあるユーザーが有効なフォーム認証 Cookie を取得した場合、サイトは再生攻撃に対して脆弱になります。 フォーム認証 Cookie を使用する場合のセキュリティを向上させるには、次の操作を行う必要があります。

  • プロパティを に設定して、フォーム認証 Cookie の絶対有効期限をSlidingExpirationfalse使用します。 これにより、ハイジャックされた Cookie を再生できるウィンドウが制限されます。

  • プロパティを にtrue設定RequireSSLし、SSL で Web サイト全体を実行することで、Secure Sockets Layer (SSL) 経由で認証 Cookie のみを発行して受け入れます。 プロパティを RequireSSLtrue 設定すると、ASP.NET が SSL 以外の接続を介して認証 Cookie をブラウザーに送信することはなくなりますが、クライアントは Cookie のセキュリティで保護された設定を受け入れない可能性があります。 つまり、クライアントは SSL 以外の接続を介してフォーム認証 Cookie を送信し、ハイジャックに対して脆弱なままにする可能性があります。 SSL で Web サイト全体を実行することで、クライアントがフォーム認証 Cookie をクリアで送信できないようにすることができます。

  • サーバー上の永続ストレージを使用して、ユーザーが Web サイトからログアウトしたときに記録し、イベントなどの PostAuthenticateRequest アプリケーション イベントを使用して、現在のユーザーがフォーム認証で認証されたかどうかを判断します。 ユーザーがフォーム認証で認証され、永続的ストレージ内の情報がユーザーがログアウトしたことを示している場合は、すぐに認証 Cookie をクリアし、ブラウザーをログイン ページにリダイレクトします。 ログインに成功したら、ユーザーがログインしていることを反映するようにストレージを更新します。 このメソッドを使用する場合、アプリケーションはユーザーのログイン状態を追跡し、アイドル状態のユーザーに強制的にログアウトさせる必要があります。

適用対象

こちらもご覧ください