1

ログイン コントローラの使用に関する問題

マスター ページのログイン ビューに問題があります。

ログインするとすべて正常に動作しますが、しばらくタブを閉じるか、アプリケーションを再構築すると、セッションは閉じられますが、ログインビューにはまだセッションが表示されます:/.

このコードは Site.Master にあります

<div class="loginDisplay">
            <asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
                <AnonymousTemplate>
                    [ <a href="~/Login.aspx" id="HeadLoginStatus" runat="server">Log In</a>
                    ]
                </AnonymousTemplate>
                <LoggedInTemplate>
                    Bienvenido <span class="bold">
                   <%-- HeadLoginName--%>
                        <asp:LoginName ID="MemberName" runat="server" />
                    </span>! [
                    <asp:LoginStatus ID="MemberLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out"
                        LogoutPageUrl="~/Login.aspx" onloggingout="HeadLoginStatus_LoggingOut" />
                    ]
                </LoggedInTemplate>
            </asp:LoginView>
        </div>

私が間違っていることは何ですか?

4

1 に答える 1

1

残念ながら、次の 2 つの概念に違いはありません。

詳しく説明しましょう。ASP.NET セッションは、HTTP プロトコルのステートレスな性質を回避できるものです。サーバーはクライアントに Cookie を発行し、この Cookie はその後の各要求でクライアントによって送信されます。次に、サーバーはメモリ内の情報をこの Cookie に関連付けます。オブジェクトを使用してこの情報にアクセスしSession["someKey"]ます。デフォルトでは、この情報はメモリに保存されますが、アウト プロセスになるように構成することもできます。そのため、アプリケーションを再構築するか、タイムアウトに達すると、サーバー上のメモリが解放され、保存したすべてのオブジェクトが消えます。ASP.NET セッションのタイムアウトを構成するには、次を使用できます。

<system.web>
    <sessionState timeout="30" />
</system.web>

一方、フォーム認証はまったく別のものです。Cookie を使用して、認証されたユーザーを追跡します。この Cookie は、ASP.NET セッション Cookie とは異なります。タイムアウト値が異なり、個別に構成されます。

<authentication mode="Forms">
  <forms
    loginUrl="/login"
    timeout="30" />
</authentication>

フォーム認証メカニズムは、サーバーのメモリに何も格納しません。Cookie 内に保存されている認証済みユーザーを追跡します。したがって、アプリケーションを再コンパイルしても、ユーザーは web.config で定義された所定のタイムアウト期間中認証されます。slidingExpirationただし、リクエストごとにタイムアウトを更新するプロパティには注意してください。

于 2012-06-12T18:17:43.780 に答える