2

ブラウザーで aspxauth および asp.net_sessionid Cookie の有効期限を設定および更新するように .NET アプリケーションをセットアップする方法があるかどうか疑問に思っています。

私が見たところ、Cookie の有効期限は 1/1/0001 のようなもので、ブラウザを閉じるまで保持するようにブラウザに指示しています (これは Chrome を使用して観察しました)。明示的な時間を設定したいのですが、リクエストごとにその時間を更新する必要があります。

私は次のようなコードでこれをやろうとしています:

var timeoutMins = Session.Timeout;
if (Response.Cookies.Count > 0)
{
   foreach (string s in Response.Cookies.AllKeys)
   {
       if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid")
       {
           Response.Cookies[s].Expires = DateTime.Now.AddMinutes(timeoutMins);
       }
   }
}

global.asax End_Request イベントでこれを実行しようとしましたが、ページごとに数回発生し、セッション状態のタイムアウトにアクセスできないため、これは適切な場所ではないようです。さらに、ログインとログアウト時にのみトリガーされるため、基本的には一度設定できますが、更新することはできません。これにより、ユーザーがアクティブであっても、ログイン後 15 分でログアウトされます。

これを処理するように.netに指示する設定がどこかにあるようです? 私はこれが奇妙な要求であることを知っていますが、これはこのプロジェクトのセキュリティ要件であるため、機能させようとしています!

4

2 に答える 2

5

多くの人が私がしていることをやろうとしているようには見えませんが、記録のために、アプリケーションの終了要求にコードを追加して、要求で Cookie を見つけ、適切な有効期限で応答でそれらを再作成しました。

var timeout = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["myTimeoutConfigSetting"]);    

foreach (var cookey in Request.Cookies.AllKeys)
{
  if (cookey == FormsAuthentication.FormsCookieName || cookey.ToLower() == "asp.net_sessionid")
  {
      var reqCookie = Request.Cookies[cookey];                                      

      if (reqCookie != null)
      {
          HttpCookie respCookie = new HttpCookie(reqCookie.Name, reqCookie.Value);
          respCookie.Expires = DateTime.Now.AddMinutes(timeout);

          Response.Cookies.Set(respCookie);
      }
  }
}
于 2012-05-07T14:36:07.793 に答える
2

ここにそれを行うための良い方法があります

http://www.andreas-kraus.net/blog/increase-aspnet-authentication-membership-cookie-timeout/

そしてこれhttp://forums.asp.net/p/1158239/1920541.aspx#1920541

于 2012-05-03T21:24:04.513 に答える