我在母版页上遇到登录视图问题。
当我登录时一切正常,但是如果我关闭标签一段时间或者我重建应用程序我的会话已关闭但登录视图仍显示会话:/。
我在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>
我做错了什么?
答案 0 :(得分: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
属性,该属性会在每次请求时更新超时。