こんにちはなどのWinフォームのセッションを実装するためにどのように私は、ウィンドウのアプリケーションではなく、目的はfirst.the主な目的で情報を使用して保持するためのセッションのような機能を実装するための計画をしたことはログアウトしているかについて、少なくともプロンプトログイン/セッションexpires.I後のパスワードは、誰かが何らかのressourcesに私を指すか、この PSを読み取るためus.Thanksと彼の経験を共有することができれば非常にgratefullだろうonline.Iそれに機能をタイムアウトするに関する情報を見つけることができません:私は」 Visual Studio 2005 merciでC#.NET 2.0を使用しています。セッションタイムアウト特に
答えて
最も簡単な解決策は、Timer
を使用し、Duration
プロパティをタイムアウトに必要なミリ秒数に設定することです。アクティビティに遭遇するたびに、Stop
を呼び出してすぐにStart
を呼び出すだけで、タイマーをリセットできます。あなたはTimer
さんTick
イベントでみたいものは何でもコードの場所は、(これはSystem.Windows.Forms.Timer
であると仮定して)、あなたはすべてのセットでしょう。
私は「私は同じ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アクションをログに記録タイマーに私の注意を引くための
おかげで、すべてのユーザ・インターフェース・コンポーネントのクリックイベント(つまり、クリックイベントのアクションを行います)私はログにように、特定の方法に含まれています私は同じモデルを使用してタイマーをリセットすることができますか?速い返事をありがとう。ありがとうございました –
確かに可能です。私はそれがあなたのケースで適切かどうかは分からないが(それは可能かもしれないし、そうではないかもしれない)、確かにうまくいくだろう。たとえば、この関数を使用してユーザー入力によって駆動されないメッセージをログに記録しないでください。タイムアウトが間違ってリセットされるためです。 –
おかげです本当に本当に感謝しています。私はこれを今実装し、マウスイベントとキーボードevent.thanksに改善して拡張する方法を見ていきます –