2014-01-14 59 views
4

我有一個asp.net mvc4應用,其中我有此類:在鑑別使用asp.net MVC內的會話變量4應用

public class Internaute { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Login { get; set; } 
    public string Password { get; set; } 
} 

然後,當用戶連接,我得到它的信息通過將其存儲在這樣的會話變量:

Session["user"] = myInternaute; 

,我用這些信息,例如,像這樣:

@{ 
    Internaute myInternaute = (Internaute)Session["user"]; 
    string login = myInternaute.Login; 
    string pwd = myInternaute.Password; 
} 

我測試用戶的存取權限由

Internaute myInternaute = (Internaute)Session["user"]; 
    if(myInternaute == null) return RedirectToAction("Index"); 

的autorization所以我有以下問題:

  1. 它是通過一個會話變量進行一個好辦法嗎?
  2. 是否有另一個想法做到這一點,因爲會議丟失了。
  3. 這個想法有一些優點嗎?

感謝,

回答

3

它是通過一個會話變量進行一個好辦法嗎?

是的,你的代碼看起來不錯,除非你從Session獲取值以確保它不爲null,否則應該檢查null。另外,你真的需要在會話中存儲密碼嗎?在Session中將它存儲爲字符串並不是一個好主意。

是否有另一個想法做到這一點,因爲會話丟失了。

如果我正確理解你的問題,會話超時會導致會話數據丟失。如果你想要,你可以增加web.config文件中的會話超時。

這個想法有一些優點嗎?

您將獲得有關在Session中隨時可用的用戶的一些基本數據,而不是查詢數據庫,但應確保Internaute類保持輕量級。

+0

謝謝,對不起,我不明白你的意思是什麼「確保Internaute類保持輕量級」? –

+1

我的意思是不要添加很多屬性。只需在整個應用程序中保持您需要的頻繁。所有其他領域,你可以在需要時從數據庫中獲取它。 –