2009-07-21 80 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 2009-07-21 09:21:41

0

你不能让类的静态。更糟糕的是,保持用户在会话中登录是因为系统中不能有多个用户。他们将共享相同的登录信息。你应该阅读关于静态。

你想要的是用于存储类的实例,在会话中,每当你需要访问它。