1

使用登录控制器的问题

我在母版页上的登录视图有问题。

当我登录时一切正常,但如果我关闭选项卡一段时间或重建应用程序,我的会话将关闭,但登录视图仍显示 Session :/.

我在 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

恐怕您对以下两个概念没有区别:

让我试着详细说明一下: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 回答