2013-05-08 23 views
6

Czy jest jakiś sposób sprawdzenia, ile czasu pozostało w obiekcie sesji przed upływem limitu czasu?Pozostało czasu na sesję do czasu przekroczenia limitu czasu

Wiem, jak uzyskać aktualny limit czasu z webconfig, ale czy jest jakiś sposób, aby wiedzieć, kiedy sesja była ostatnio aktywna?

Moi użytkownicy będą wypełniać duże formularze w mojej aplikacji, a jeśli zajmie to więcej niż 10 minut, zanim trafią "wyślij", zostaną wylogowani. Chciałbym ostrzec ich, jeśli sesja wkrótce się skończy. Dokonam sprawdzenia za pomocą wywołania ajaxowego.

+0

może to być przydatne dla Ciebie: http://programmerramblings.blogspot.nl/2009/08/aspnet- session-timeout-control-jquery.html –

Odpowiedz

2

Można śledzić czas serwera DateTime.Now w zmiennej javascript.
Porównaj to z bieżącym czasem w javascript.

Jeśli różnica przekroczy swój próg, możesz wyświetlić komunikat ostrzegawczy w javascript.

Co więcej, możesz wywołać wywołanie ajaxa na serwerze, co wydłuży limit czasu serwera.

+0

Po prostu chciałem zasugerować to samo. Sprawdź http://forums.asp.net/t/1207721.aspx/2/10 – StringBuilder

+2

Czy można bezpiecznie założyć, że każde wywołanie na serwerze (synchroniczne lub asynchroniczne) spowoduje "zresetowanie" limitu czasu? – Johan

+2

Tak. Każde żądanie użytkownika do serwera zresetuje limit czasu. – nunespascal

2

Można również ustawić limit czasu JavaScript na przekroczenie limitu czasu sesji za pomocą kodu z tyłu. Spraw, by działała niezależnie od wybranej funkcji JavaScript. Bardzo elastyczny i nie trzeba się z syf o sprawdzenie aktualnego czasu ... itd

coś takiego:

"window.setTimeout('yourJSFunctionGoesHere()', " + Session.Timeout + ");"; 

Jeśli chcesz ostrzec 2 minut przed mogliśmy robi coś takiego:

"window.setTimeout('yourWarningJSFunctionGoesHere()', " + Session.Timeout-2 + ");"; 
+0

To wygląda dobrze. Poza tym wolę przekazywać anonimową funkcję do 'setTimeout()';) – Johan

+0

Dzięki temu potrzebuję przedstawiciela :-) – TheKingDave

+0

http://weknowgifs.com/wp-content/uploads/2013/03/christian-bale-upvote -gif.gif – Johan

2

Możemy obsłużyć to poprzez zdefiniowanie czasu ostrzegania sesja czas & na web.config i przy użyciu timera, aby sprawdzić czas, który upłynął na stronie.

Web.Config:

<appSettings> 
    <add key="SessionWarning" value="30" /> 
</appSettings> 

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

Client strony:

<script language="javascript" type="text/javascript"> 
    /* Page Time Out Warning Message Script */ 
    var sessionTimeoutWarning = '<%=System.Configuration.ConfigurationSettings.AppSettings["SessionWarning"].ToString()%>'; 
    var sessionTimeout = "<%= Session.Timeout %>"; 
    var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000; 

    var timeOnPageLoad = new Date(); 
    setTimeout('SessionWarning()', sTimeout); 
    //To redirect to the home page 
    setTimeout('RedirectToWelcomePage()', parseInt(sessionTimeout) * 60 * 1000); 

    //Session Warning 
    function SessionWarning() { 
     //minutes left for expiry 
     var minutesForExpiry = (parseInt(sessionTimeout) - 
              parseInt(sessionTimeoutWarning)); 
     var message = "Your session will expire in another " + minutesForExpiry + 
           " mins! Please Save the data before the session expires"; 
     alert(message); 
     var currentTime = new Date(); 
     //time for expiry 
     var timeForExpiry = timeOnPageLoad.setMinutes(timeOnPageLoad.getMinutes() 
              + parseInt(sessionTimeout)); 

     //Current time is greater than the expiry time 
     if (Date.parse(currentTime) > timeForExpiry) { 
      alert("Session expired. You will be redirected to home page"); 
      window.location = "../Home.aspx"; 
     } 
    } 

    //Session timeout add home page where you want to redirect after session timeout 
    function RedirectToWelcomePage() { 
     alert("Session expired. You will be redirected to home page"); 
     window.location = "../Home.aspx"; 
    } 
    /* End */ 

</script> 
Powiązane problemy