2012-06-12 106 views
1

Problem using Login Controller登錄查看出現的記錄,但我沒有登錄

我有一個問題,登錄觀母版頁。

當我登錄時,一切正常,但如果關閉標籤一段時間或重建應用程序,我的會話已關閉,但登錄視圖仍顯示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> 

我做錯了什麼?

+0

什麼是在你的Login.aspx.cs文件中,可能有設置Authentication Cookies – Damith

回答

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> 

Forms Authentication機制不會在服務器的內存中存儲任何內容。它跟蹤存儲在cookie內的經過身份驗證的用戶。所以,即使你重新編譯你的應用程序,用戶仍然可以在web.config中定義的給定的超時時間內進行身份驗證。請注意,slidingExpiration屬性會更新每個請求的超時時間。