私たちは「間違ったことをしている」のでしょうか?
同僚と私は、UniDataサーバー上の診断プログラムからの結果を表示するための「ポータル」として機能するASP.NETページをいじっています。私たちはASP/ASP.NETの奇妙な仕事をしていますが、それは私たちの主要言語ではありません。
このサーバーにアクセスするには、UniDataサーバーを認証および使用するためのAPIであるUniObjectsを使用する必要があります。
Webサイトにアクセスする各ユーザーは、UniDataで認証し、UniObjectsライブラリを介して独自のセッションを取得し、再度サインインせずに使用できるようにする必要がありました(セッションが「x」分以内に使用されない場合を除く)。
私たちが思いついた方法は次のとおりです。
ハッシュテーブル付きのシングルトンがあります。Windowsユーザー名をセッションオブジェクトにマップします。
ユーザーが私たちのページにアクセスし、「username」がハッシュテーブルに存在しない場合、認証が成功すると、セッションオブジェクトが作成され、ハッシュテーブルに追加されるログインページにリダイレクトされます。それ以外の場合は、ハッシュテーブルからユーザーの既存のセッションオブジェクトを取得し、それをリクエストに使用します(有効期限が切れている場合を除きます。有効期限が切れている場合は、削除してログインページにリダイレクトします)。
各セッションオブジェクト(UniObjectsからのもののラッパーオブジェクト)には、「lastUsed」メソッドがあります。UniDataサーバーにログインしているユーザーにはライセンス制限があるため、ユーザーのセッションをクリーンアップする必要があります。そのため、ユーザーがサインインページにリダイレクトされるたびに、「x」分以内にセッションが使用されていないかどうかがチェックされます。その場合、そのセッションを閉じて、ハッシュテーブルから削除します。これはここで行われるため、ユーザーはログイン時にのみ、すべてのリクエストですべてのセッションをチェックすることに関連する遅延を経験しません。
このソリューションはにおいがするという何かが私に言っていますが、私は私たちが何をすべきかを理解するのに十分なASP.NETの経験がありませんか?これを行うためのより良い方法はありますか、それとも実際に大丈夫ですか?