2009-05-11 13 views
2

implementieren Hallo, ich habe geplant, eine Funktion wie Sitzung in Windows-Anwendung zu implementieren, aber nicht für den Zweck, um Informationen zunächst zu halten. Der Hauptzweck ist es, sich abzumelden oder zumindest aufgefordert Login/Passwort nach Ablauf der Sitzung.Ich kann nicht finden Informationen über Timeout-Funktion auf es online.Ich wäre sehr dankbar, wenn jemand mich auf einige Ressourcen zeigen oder teilen Sie seine Erfahrung mit uns.Vielen Dank für das Lesen dieser PS: ich ' m mit C# .NET 2.0 mit Visual Studio 2005 Merci.wie Winform Sitzung wie Sitzung Timeout insbesondere

Antwort

3

Ihre einfachste Lösung wäre, eine Timer-Eigenschaft zu verwenden und die Eigenschaft Duration auf die Anzahl der Millisekunden einzustellen, die Sie in Ihrem Timeout möchten. Wenn Sie auf eine Aktivität stoßen, können Sie den Timer einfach zurücksetzen, indem Sie Stop anrufen und dann sofort Start aufrufen. Legen Sie den gewünschten Code in das TimerTick Ereignis (vorausgesetzt, dies ist ein System.Windows.Forms.Timer) und Sie werden alles bereit sein.

+0

Danke für das Zeichnen meiner Aufmerksamkeit auf die Timer-Klasse.Ich protokolliere auch Benutzeraktivität.Alle Aktion ist in einer bestimmten Methode enthalten, so auf Click-Ereignis auf jeder Benutzeroberfläche Komponente (die eine Aktion auf Click-Ereignis tut) log ich die Method Name als Aktivität in der Datenbank.Kann ich das gleiche Modell verwenden, um den Timer zurückzusetzen? Danke für die schnelle Antwort zu schätzen es –

+0

Sicher können Sie. Ich weiß nicht, ob es in Ihrem Fall passt oder nicht (es könnte sein, oder es könnte nicht sein), aber es würde sicherlich funktionieren. Seien Sie beispielsweise sicher, dass Sie diese Funktion nicht verwenden würden, um Nachrichten zu protokollieren, die NICHT von Benutzereingaben gesteuert werden, da dies Ihr Zeitlimit falsch zurücksetzen würde. –

+0

danke Kumpel wirklich wirklich schätzen it.i würde dieses für jetzt implementieren und sehen, wie es zu verbessern und zu Mausereignis und Tastatur event.thanks erweitern –

2

Ich habe eine Implementierung über diese Session-Sache entwickelt, die ich gerne teilen möchte, besonders für diejenigen, die das gleiche Problem haben. Es ist nicht perfekt und ich mag kluge Leute wie Sie, die mir eine Anleitung geben akzeptabel genug. zunächst einmal habe ich eine Klasse 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; 
     } 

    } 

} 

es ist eine MDI-Anwendung so im Inneren der Hauptform i Funktion startsession

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

    } 

so jederzeit der Benutzer klicken Sie auf etwas haben, überprüfen wir die Usersession. SessioAlive Eigenschaft wie so in diesem Schaltergehäuse snippet

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

und innerhalb der Loginform ist Login korrekt nennen wir die usersession.Res (EtTimer)

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

jetzt wollte ich wirklich die Prüfung im Hintergrund ausgeführt werden soll, die Were ist ich brauche Ihre advice.here ich verwende forms.timer einen kleinen Job zu erstellen, aber da forms.timer hat nicht Autoreset- es tun eine endlose loop.here ist it.it der Innenseite Hauptform

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

    } 

so was denken Sie, ich sollte so tun, dass es nicht der Benutzer eine Aktion erforderlich ist, bevor es für Berechtigungsnachweise Aufforderung ist, wenn Sitzung abläuft. danke für das Lesen dieser langen Sachen. :)