2010-02-15 41 views
14

我得到了使用會話變量的氛圍是有點在ASP.NET MVC中看不起。asp.net mvc - 在哪裏存儲用戶ID - 整數?

一旦用戶登錄時,我想保留用戶的用戶id,這樣我就不必查詢它所有的時間等

什麼是最有效的方式做,在ASP.NET MVC ?

回答

18

我已經看到類似的問題偶爾會彈出一次,我不知道這個「氛圍」來自哪裏。 Session是專門爲此設計的 - 用於存儲會話相關信息。使用Session存儲用戶ID或類似信息絕對沒有錯。

+0

謝謝! *評論填充*。 – 2010-02-15 00:34:19

+2

氛圍來自人們錯誤地使用會話作爲身份驗證,這正是progtick正在做的事情。 – jfar 2010-02-15 07:14:59

+1

我認爲會員資格/配置文件提供商爲您處理了所有這些,其使用受到了Microsoft的鼓勵。他們甚至在示例應用程序中包含一個示例。 – 2010-02-15 13:40:37

0

會話狀態。不合適時不應使用它。但沒有其他任何東西可以用於憑證。只要確保它們是可序列化的,以便您可以在需要時將會話推出進程。

+1

「但沒有其他的東西可以用於憑證」什麼?像Cookie和FormsAuthentication? Cookies比Session更穩定1000%。 – jfar 2010-02-15 07:05:19

+0

爲什麼你不能檢查一個會話,並讓用戶再次登錄,如果它不可用?我不太理解爲什麼cookies更好。 – 2010-02-15 17:42:51

+0

而我不是在爭吵 - 我真的很想聽到更多關於此的信息。 – 2010-02-15 17:43:50

2

會話旨在用於有狀態的用戶交互 - 一個購物車的想法。他們被看不起,因爲他們很難測試,並傾向於將序列化邏輯強制到控制器中。如果你只是想盡量減少查詢,你應該使用緩存。

編輯: 對於HttpContext.Cache教程是驚人的很難。 Steven Sanderson在Pro ASP.net MVC框架(Apress 2009)第4頁中有約4頁。 530-534。

Caching in asp.net-mvc也許會給你一些提示。

+0

你可以發佈一個鏈接到asp.net mvc緩存嗎? – TPR 2010-02-15 06:35:25

8

你得到了正確的氛圍。這在許多情況下都不是必需的。會話狀態很容易丟失,經常被濫用於處理登錄用戶(通過設置Session [「IsLoggedIn」] = true或通過檢查Session [「User」]!= null,突然Session消失並且用戶已註銷),則應使用表單身份驗證。在這裏,你可以閱讀有關窗體身份驗證和存儲附加數據與它:

Forms Authentication Configuration and Advanced Topics

如果你仍然想使用會話,這是好事,創建包裝,使之更容易測試和代碼擺脫字符串:

Wrapper for ASP.NET Session

+0

您不會使用表單驗證,然後將用戶名等存儲在會話中嗎? – 2010-02-15 02:06:01

+1

@ d03boy:默認情況下,用戶名存儲在表單身份驗證cookie中。您可以添加用戶的ID。如果你失去了會話(並且在很多情況下會發生這種情況,例如有人改變了web.config),你可以將數據放在安全的地方,而不必重建它。好的,您可以使用會話,但請記住,用戶登錄時可能會丟失會話。 – LukLed 2010-02-15 02:24:30