.Netセッションベースの変数の作成にわずかな問題があります。
私はSession
拡張機能を使用してそれで済ますことができることを知っていますが、単一のデスクトップでの複数のブラウザー(IEの場合はウィンドウまたはタブ)の状況をもっと探しています。
現在、Webアプリでモジュールが宣言されています。IEの2つの個別のウィンドウをPageRouting
開くと、期待どおりに最初にカスタムデザインが読み込まれますが、両方のウィンドウを開いた状態で次の手順に進むと、最後のウィンドウが開きます。アプリケーションの残りの部分で使用される設計/ロジックです。
Module.vb
Namespace classes
Module Globals
Public Brand As Brand
Public Test As Test
Public Results As Results
Public Primary As String = "#FFFFFF"
Public Secondary As String = "#FFFFFF"
Public Terteruary As String = "#FFFFFF"
End Module
End Namespace
コードでは、オブジェクトをGlobals.Brand
またはとして参照しますGlobals.Primary
が、同じデスクトップが異なるアドレスで同じWebサイトを開く可能性がある状況でPageRouting
は、最後に開いたブラウザウィンドウを想定しています。
Brand
&Test
変数は、のイベントで初期化されSession_Start
ますGlobals.asax
。これらのオブジェクトへのすべての参照はGlobals.<variable>
、使用時に注釈を使用する明示的な参照です。 Results
ウェブサイトの実行中に最初の使用時に初期化されます。
質問
- 個々のブラウザウィンドウに、サイトで使用するための独自のセッションキャッシュがロードされていることを確認するにはどうすればよいですか?
更新-2012-12-03
このようなデザインはどうですか?
Public Class Class1
private _sess as HTTPSessionState
...
private readonly property Session as HttpSessionState
Get
if _sess is nothing then
_sess = httpcontext.current.session
end if
return _sess
End Get
end property
...
public property Primary as string
Get
return cstr(session("primary"))
end get
Set(value as string)
session("primary") = value
end set
end property
...
end class
Class1はマスター/コンテンツページレベルでインスタンス化されていますか?
アップデート#2-2012-12-03
モジュールを変更しました。これが実行可能なセッション制御セットアップであるかどうかをお知らせください
Module Globals
'Dictionary Collection of type (SessionID:String, Quiz:classes.Quiz)
Public Quizzes As Dictionary(Of String, classes.Quiz)
Public Property Quiz(session As String) As Quiz
Get
Return Quizzes(session)
End Get
Set(value As Quiz)
Quizzes(session) = value
End Set
End Property
End Module
最終フォーム2012-12-10:
Module.vb
Module Globals
'Get/Set a Quiz object into the SessionState.
Public Property Quiz(sess As HttpSessionState) As Quiz
Get
Return CType(sess("quiz"), Quiz)
End Get
Set(value As Quiz)
sess("quiz") = value
End Set
End Property
End Module
Web.config
<system.web>
...
<sessionState mode="InProc" cookieless="UseCookies"
regenerateExpiredSessionId="true" timeout="20"
cookieName="ASPNET_Quiz" />
...
</system.web>
上記のフォームは、プロパティのインデクサーの側面を利用して期待どおりに機能しました。Haventにはユーザーインスタンスの問題がありました。これが効果的に機能するためには、ユーザーはすべてのブラウザウィンドウを閉じ、セッションをクリアするために新しいウィンドウを開く必要があることに注意してください。