创建基于 .Net Session 的变量时有一点问题。
我知道我可以只使用Session
扩展并完成它,但我正在寻找更多在单个桌面上的多个浏览器(窗口或选项卡,对于 IE)情况。
目前,我在 Web-App 中声明了一个模块,当我打开两个单独的 IE 窗口时,它们最初会PageRouting
按预期加载自定义设计,但是一旦我在两个窗口都打开的情况下进入下一步,最后一个要打开是用于应用程序其余部分的设计/逻辑。
模块.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
但在任何一种情况下,同一个桌面可以打开具有不同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:
模块.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
网页配置
<system.web>
...
<sessionState mode="InProc" cookieless="UseCookies"
regenerateExpiredSessionId="true" timeout="20"
cookieName="ASPNET_Quiz" />
...
</system.web>
上述表单使用属性的索引器方面按预期工作。Havent 有任何用户实例问题。附带说明一下,为了使此功能有效工作,用户必须关闭所有浏览器窗口并打开一个新窗口以清除会话