4

フォーム認証をかなりうまく使用していますが、奇妙な問題に遭遇しました。私はウェブを見回しましたが、これまでのところ答えが見つかりませんでした。

私は Javascript を使用して、現在のセッションがタイムアウトから 60 秒離れていることを判断しています。

これは、チケットを更新するために使用しているコードです。チケットの現在の有効期限に 5 分を追加するだけです。しかし、新しい有効期限を出力すると、常に 5 分未満です。通常4分数秒。

コード:

    string userID = HttpContext.Current.User.Identity.Name;
    HttpCookie cookie = FormsAuthentication.GetAuthCookie(userID, true);

    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

    DateTime NEW_EXPIRY = DateTime.Now.AddMinutes(FormsAuthentication.Timeout.Minutes);

    FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
        ticket.Version, 
        userID, 
        DateTime.Now,
        NEW_EXPIRY,
        ticket.IsPersistent,
        ticket.UserData,
        ticket.CookiePath);

    cookie.Value = FormsAuthentication.Encrypt(newTicket);

    if (ticket.IsPersistent) cookie.Expires = newTicket.Expiration;

    cookie.Secure = FormsAuthentication.RequireSSL;

    HttpContext.Current.Response.Cookies.Add(cookie);

したがって、ここに時差の出力例を示します。

現在のタイムスタンプ = 16/01/2016 14:03:28 チケットの有効期限 = 16/01/2016 14:07:49 (合計秒 = 261.0857244)

有効期限が正確に 14:08:28 にリセットされないのはなぜですか?? ここで壁に頭をぶつけています...

4

1 に答える 1

0

わかりましたので、FormsIdentity オブジェクトの有効期限の値が正しくない理由はまだわかりません...そこで、更新メソッドから実際の新しい有効期限の値 (DateTime として) を渡し、それに依存しました。したがって、この値は正しいようです。これは、リアルタイム タイムアウト値を決定するために使用する必要がある値です。

それは意味がありますか?わかりませんが、今は動いています!

于 2016-01-16T18:36:03.187 に答える