2012-05-03 69 views
1

ブラウザでaspxauthとasp.net_sessionidのクッキーの有効期限を設定して更新するように.NETアプリケーションを設定する方法があるのでしょうか?aspxauthとasp.net_sessionidのクッキーで有効期限を設定/更新する

クッキーの有効期限は1/1/0001のようなもので、ブラウザが終了するまでブラウザを閉じておくように指示しています(私はこれをChromeを使用して確認しました)。私は明示的な時間を設定したいと思いますが、毎回その要求を更新する必要があります。

私は次のようにいくつかのコードでこれを行うにしようとしています:それは数回発射するので、これは良い場所ではないようですが、私は、のGlobal.asax END_REQUESTイベントでこれをやってみました

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); 
     } 
    } 
} 

ページごとに、あなたはセッションステートタイムアウトにアクセスできません。さらにそれはログインとログアウトでのみ起動するので、基本的には一度設定することができますが、私はそれを更新することはできません。これにより、ログインしてから15分後にユーザーがアクティブになっていてもログアウトされます。

これを処理するために.netに伝える設定がいくつかあるようです。私はこれが奇妙な要求であることを知っていますが、このプロジェクトではセキュリティ上の要求ですので、動作させるよう努力しています!

答えて

4
それは多くの人々は私がやってやろうとしているわけではないように見えるが、レコードの

、アプリケーションの終了要求にコードを追加して、要求内の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); 
     } 
    } 
} 
関連する問題