2009-05-11 3 views
2

こんにちはなどのWinフォームのセッションを実装するためにどのように私は、ウィンドウのアプリケーションではなく、目的はfirst.the主な目的で情報を使用して保持するためのセッションのような機能を実装するための計画をしたことはログアウトしているかについて、少なくともプロンプトログイン/セッションexpires.I後のパスワードは、誰かが何らかのressourcesに私を指すか、この PSを読み取るためus.Thanksと彼の経験を共有することができれば非常にgratefullだろうonline.Iそれに機能をタイムアウトするに関する情報を見つけることができません:私は」 Visual Studio 2005 merciでC#.NET 2.0を使用しています。セッションタイムアウト特に

答えて

3

最も簡単な解決策は、Timerを使用し、Durationプロパティをタイムアウトに必要なミリ秒数に設定することです。アクティビティに遭遇するたびに、Stopを呼び出してすぐにStartを呼び出すだけで、タイマーをリセットできます。あなたはTimerさんTickイベントでみたいものは何でもコードの場所は、(これはSystem.Windows.Forms.Timerであると仮定して)、あなたはすべてのセットでしょう。

+0

おかげで、すべてのユーザ・インターフェース・コンポーネントのクリックイベント(つまり、クリックイベントのアクションを行います)私はログにように、特定の方法に含まれています私は同じモデルを使用してタイマーをリセットすることができますか?速い返事をありがとう。ありがとうございました –

+0

確かに可能です。私はそれがあなたのケースで適切かどうかは分からないが(それは可能かもしれないし、そうではないかもしれない)、確かにうまくいくだろう。たとえば、この関数を使用してユーザー入力によって駆動されないメッセージをログに記録しないでください。タイムアウトが間違ってリセットされるためです。 –

+0

おかげです本当に本当に感謝しています。私はこれを今実装し、マウスイベントとキーボードevent.thanksに改善して拡張する方法を見ていきます –

2

私は「私は同じproblem.itが完璧ではない有するもののために特別に共有したいだろうと私はあなたのようなスマートな人々は私にそれを作るためにいくつかの指針を与えることを気に入るだろう、そのセッションの事についていくつかの実装を思い付くまし十分に受け入れられる。 は、すべての最初の私はそれが私は、関数のstartSession

public frMain() 
    { 
     InitializeComponent(); 
     StartSession(); 
     //SessionChecker(); 
    } 
    public void StartSession() 
    { 
     try 
     { 
      usersession.BeginTimer(); 
     } 
     catch (System.Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

    } 

はそういつでも何かにユーザーのクリックが、私たちはusersessionをチェックする必要があり、メインフォーム内のように、MDIアプリケーションのクラスusersession

using System.Timers; 
public class usersession 
{ 
    private static bool sessionalive; 
    private static Timer usertimer; 

    public static bool SessionAlive 
    { 
     get { return sessionalive; } 
     set { sessionalive = value; } 
    } 


    public static void BeginTimer() 
    { 
     try 
     { 
      SessionAlive = true; 
      //usertimer.Start(); 
      usertimer = new Timer(int.Parse(ConfigurationManager.AppSettings["sessiontime"].ToString())); 
      usertimer.Enabled = true; 
      usertimer.AutoReset = false; 
      usertimer.Elapsed += new ElapsedEventHandler(DisposeSession); 

     } 
     catch (Exception ex) 
     { 

      return; 
     } 

    } 


    private static void DisposeSession(object source, ElapsedEventArgs e) 
    { 
     try 
     { 
      SessionAlive = false; 
     } 
     catch (System.Exception ex) 
     { 
      return; 
     } 

    } 

    public static void ResetTimer() 
    { 
     try 
     { 
      SessionAlive = true; 
      usertimer.Stop(); 
      usertimer.Start(); 
     } 
     catch (Exception ex) 
     { 

      return; 
     } 

    } 

} 

を作成しました。したがって、このスイッチケースの内側にスニペット

case "transfer": 
       if (!usersession.SessionAlive) 
       { 
        new LoginForm().ShowDialog(); 
       } 
       MessageBox.Show("cash back transfert page"); 
       break; 

とloginForm内部はログインですようSessioAliveプロパティは、私たちがusersession.Resを呼び出す正しいですかetTimer(は)

this.DialogResult = DialogResult.OK; 
     usersession.ResetTimer(); 
     this.Close(); 

は、私は本当に私は小さなジョブを作成するためにforms.timer使用しますが、forms.timerはオートリセットそれを持っていないので、あなたのadvice.hereを必要としたのですバックグラウンドで実行されるようにチェックしたかったですit.itのは、メインフォーム内の無限loop.hereをされてやって

private void SessionChecker() 
     { 
      try 
      { 
       check = new Timer(); 
       check.Enabled = true; 
       check.Interval = 1000; 
       check.Tick += new EventHandler(check_Tick); 
      } 
      catch (Exception) 
      { 

       throw; 
      } 

     } 

    void check_Tick(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!usersession.SessionAlive) 
      { 
       new LoginForm().ShowDialog(); 
       check.Stop(); 

      } 

     } 
     catch (System.Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

    } 

ので、あなたは、私はセッションの有効期限が切れたとき、それは資格情報のプロンプトになる前に、それはユーザーにアクションを必要としないようにやるべきだと思うものを。 この長いものを読んでくれてありがとう。 :) class.Iもユーザーactivity.Everyアクションをログに記録タイマーに私の注意を引くための