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

你不能讓類的靜態。更糟糕的是,保持用戶在會話中登錄是因爲系統中不能有多個用戶。他們將共享相同的登錄信息。你應該閱讀關於靜態。

你想要的是用於存儲類的實例,在會話中,每當你需要訪問它。