5

検索しましたが、この質問に対する具体的な回答は見つかりませんでした。セッションの有効期限が切れる前に、サーバーの残り時間を取得するにはどうすればよいですか? 私のセッション設定:

//タイムアウト (例: 10 分)。

<authentication mode="Forms"> <forms name=".ASPXAUTH_External" loginUrl="Authentication/Unauthorized.aspx" protection="All" timeout="10" path="/" slidingExpiration="true" defaultUrl="~/Pages/home.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
</authentication>
<sessionState mode="InProc" timeout="10">
</sessionState>

初期値を取得します (10*60 = 600 秒になります):

SessionStateSection sessionSection = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");
countdown.Text = sessionSection.Timeout.TotalSeconds.ToString();

ただし、セッション時間が半分以下になり、ユーザーが何らかのアクションを実行した場合。初期値 600 を取得しますが、「slidingExpiration」によって時間が追加されるため(どれだけかわかりません)、残りのセッション時間は等しくありませんが、セッションの残り時間を開始 10 分ポイントにリセットしません。

有効期限までの残りのセッション時間を取得するにはどうすればよいですか?

4

3 に答える 3

2

セッションの有効期限が次のようになることがわかりました。

DateTime dateNow = DateTime.Now;
if (HttpContext.Current.User.Identity is FormsIdentity)
{
    HttpCookie authCookie = this.Context.Request.Cookies[FormsAuthentication.FormsCookieName];
    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    double leftSeconds = (authTicket.Expiration - dateNow).TotalSeconds;
    // Control in MasterPage, where I setting value ant then taking for JavaSript to CountDown message
    countdown.Text = leftSeconds > 0 ? leftSeconds.ToString() : "0";
} 
于 2013-02-25T09:27:08.473 に答える
0

サーバー側の場合は (ポストバックで) リセットされるため、10 分あれば 10 分です。クライアント側では、サーバーへの最後のトリップの後にタイマーを設定できます。たとえば、8 分のタイマーを設定して、セッションが 2 分で期限切れになることを警告できます...もちろん、静的ではなく、実際の残り時間を表示したいでしょう。メッセージ。

setTimeout メソッドを見てください。 このリンクには、使用する可能性のあるいくつかの JavaScript タイミング メソッドに関する情報があります。

于 2013-02-22T16:06:26.390 に答える