2013-05-08 2 views
6

タイムアウトが発生する前にセッションオブジェクトに残っている時間を知る方法はありますか?タイムアウトまでセッションに時間を残します

私はwebconfigから実際のタイムアウトを取得する方法を知っていますが、セッションが最後にアクティブだった時期を知る方法はありますか?

私のユーザーは私のアプリケーションで大きなフォームを記入し、10分以上かかると「送信」を押すとログアウトされます。セッションがタイムアウトしようとしている場合、私はそれらに警告したいと思います。私はajax呼び出しを使用してチェックを行います。

+0

これはあなたに使用であるかもしれません:http://programmerramblings.blogspot.nl/2009/08/aspnet- session-timeout-control-jquery.html –

答えて

2

サーバー時刻DateTime.Nowをjavascript変数で追跡できます。
javascriptの現在の時刻と比較してください。

しきい値の差に差がある場合は、javascriptで警告メッセージを表示できます。

さらに、サーバーへのajax呼び出しを起動すると、サーバーのタイムアウトが長くなる可能性があります。

+0

同じことを提案したかっただけです。チェックhttp://forums.asp.net/t/1207721.aspx/2/10 – StringBuilder

+2

サーバー(同期または非同期)に対する各呼び出しがタイムアウトを「リセット」すると想定するのは安全ですか? – Johan

+2

はい。サーバーへのユーザーの要求は、タイムアウトをリセットします – nunespascal

2

また、コードタイムアウトを使ってセッションのタイムアウトにJavaScriptタイムアウトを設定することもできます。必要なJavaScript関数を実行するようにします。など...非常に柔軟で、あなたは現在の時刻を確認しながら約マックする必要はありません。このような

何か:

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

あなたは2分に警告したい場合は、あなたができる前には次のように行います。

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

これは良いですね。私は、 'setTimeout()'に無関係な関数を渡すことを好む以外は – Johan

+0

ありがとう私は担当者が必要です:-) – TheKingDave

+0

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

2

私たちは、web.configファイルにセッション時間&警告時間を定義し、ページ上の経過時間を確認するためにタイマーを使用してこれを処理することができます。

のWeb.Config:

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

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

クライアントのページ:

<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> 
関連する問題