2014-01-14 56 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

我的意思是不要添加很多属性。只需在整个应用程序中保持您需要的频繁。所有其他领域,你可以在需要时从数据库中获取它。 –