2009-07-21 19 views
0

私はglobal.asaxを使用したasp.netアプリケーションを作成しました。私はプロパティを使用してLoginID、CompanyIDなどのユーザー情報を格納する静的クラスを作成しました。 IsLoggedInプロパティは、ユーザーがログインしているかどうかを示します。これらのプロパティをリセットするために、同じクラス内でメソッドResetAll()を作成しました。ASP.NETでセッションが終了しない

ユーザーがログオフせずにブラウザウィンドウを直接閉じると、プロパティ値がリセットされないという問題があります。したがって、ユーザーが新しいブラウザーウィンドウを開くと、ユーザーは自動的にログインします。 Session_End()からResetAll()を呼び出していますが、まだ動作していません。誰かが私に何が間違っているのか説明することができますか、またはユーザーがブラウザウィンドウを直接閉じるとプロパティ値をリセットする方法。

答えて

1

これを正しく読んでいて、静的メンバーのクラスがある場合は、問題が発生します。 ASP.NET Webアプリケーションの場合、静的メンバーは個々のユーザーだけでなく、AppDomain全体で静的なものなので、要求の出所に関係なく値は同じになります。

あなたが実際にやっていることは、セッションにユーザー情報クラスのインスタンスを格納することです。そのようにして、情報はその特定のユーザーに固有です。また、ブラウザウィンドウを閉じたときにセッションCookieが通常削除されるため、ブラウザウィンドウが再オープンされたときに新しいセッションが強制されるため、この問題が解決されます。

だから、のようなもの:あなたはクラスが静的にすることはできません

Dim thisUser As New UserInformation() 
thisUser.LoginID = someValue 
Session("UserInformation") = thisUser 
+0

非常に良い!それはかなり包括的な答えです。 +1 – Cerebrus

+0

静的なクラスを作成する代わりに、通常のクラスを使用してセッション内に格納する必要があります。 – IrfanRaza

+0

そうです。クラスの非静的インスタンスを作成し、これをセッションに格納します。 –

0

。ユーザーが複数のセッションにまたがってログインするのを保つことよりも、システムに複数のユーザーを置くことはできません。彼らはすべて同じログイン情報を共有します。静的についてお読みください。

必要なのは、そのクラスのインスタンスをセッションに保存し、必要に応じていつでもアクセスできるようにすることです。

関連する問題