質問

Windowsアプリケーションで作業しています。ユーザーが一定期間アクティブでない場合、ログオフされるwinアプリでセッション(Webアプリにある)をシミュレートする必要があります。ユーザーのログイン状態はデータベースで維持されます。

革新的なアイデア???

役に立ちましたか?

解決

セッション(またはCallContextなど)は必要なく、シングルトン"ユーザーストア" 1つの制限があります:

ユーザーがログインまたはアクティビティを表示した後、その日付/時刻を保存する必要があります。次回、ユーザーが何かをしたいときは、(lastactivity + logouttime)を実際の日付/時刻と比較するだけです。

プロセスの概要は次のとおりです。

              [User login]
                   |
                   !
 [User 'store' saves user date + login time]
 [This is a singleton                      ]

                  ...

[Next time user wants to do something. The   ]
[program asks user data from the user 'store']
                   |
                   !
[If the actual time is greater than user     ]
[lastactivity + LOGOUTTIME, user cannot do it]
[If not, then update last activity           ]

UserStoreは Dictionary として実装し、次のように使用できます。

// Log in
Singleton.UserStore.Add("John", new UserData( yourUserObject, DateTime.Now));

...

// Check (ie. in a property-get)
var userData = Singleton.UserStore["John"];
if (userData.LastActivityDate + _LOGOUTIME > DateTime.Now()) 
{
   throw UserAutomaticallyLoggedOut();
}
else
{
   userData.LastActivityDate = DateTime.Now();
}

他のヒント

思い浮かぶのは、BackgroundWorkerを使用して、タイマーがゼロになったときにユーザーをログオフすることです。このタイマーは、ユーザーが行うすべてのアクションでリセットされます。または、マウスまたはキーボードイベントにフックして、ユーザーがマウスを動かさなかったり、キーボードを使用していないときに、ログオフ時間に達するまでタイマーがカウントダウンするようにすることもできます。

ユーザーがソフトウェアを操作するたびにリセットされる、ある種のタイムアウトを持つクラスをアプリケーションに作成できます。タイムアウトに達すると、ユーザーはログアウトされます。

ここで注意が必要なのは、ユーザーの操作を検出することです。 ASP.NETでは非常に簡単です。基本的には、ページリクエストのみを確認する必要があります。 Windowsフォームアプリケーションでは、より詳細なレベルで入力を監視する必要があります(たとえば、テキストボックスでキーを押すと、ユーザー操作が行われます)。 KeyPreviewプロパティとフォーム上のKeyPressイベントリスナーを一緒に使用するのがよい方法だと思います。

さて、最初に、非アクティブとはどういう意味ですか? Web上では、状態がない状態をシミュレートしようとしています。ただし、クライアントアプリでは、MouseMoveでさえあらゆる種類のイベントを取得します。 Ondeのアイデアは、TextBoxやButtonなどの標準入力コントロールからUserControlを作成し、イベントが呼び出されたときに何らかのタイマーオブジェクトを更新できるようにすることです。もう1つの方法は、UserControlの代わりに、作成した各イベントハンドラーのタイマーを更新することです。おそらく、フォーム自体のMouseMoveイベントまたはKeyDownイベントに基づいてタイマーを更新する方が簡単でしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top