【问题标题】:Using a session variable in authentification within asp.net mvc 4 application在 asp.net mvc 4 应用程序中的身份验证中使用会话变量
【发布时间】:2014-02-01 22:33:58
【问题描述】:

我有一个 asp.net mvc4 应用程序,其中我有这个类:

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");

所以我有这些问题:

  1. 通过会话变量进行处理是一种好方法吗?
  2. 是否有其他想法来执行此操作,因为会话已丢失。
  3. 这个想法有什么好处吗?

谢谢,

【问题讨论】:

    标签: c# asp.net asp.net-mvc-4 session-variables session-state


    【解决方案1】:

    通过会话变量进行处理是一种好方法吗?

    是的,您的代码看起来不错,但您应该在从 Session 获取值时检查 null 以确保其不为 null。另外,您真的需要将密码存储在会话中吗?将其作为字符串存储在 Session 中并不是一个好主意。

    是否还有其他想法可以这样做,因为会话丢失了。

    如果我正确理解您的问题,是的,您的会话数据将在会话超时时丢失。如果您愿意,可以在 web.config 文件中增加会话超时。

    这个想法有什么好处吗?

    您将在 Session 中轻松获得一些有关用户的基本数据,而不是查询数据库,但您应该确保 Internaute 类保持轻量级。

    【讨论】:

    • 谢谢,对不起,我不明白这句话“确保 Internaute 类保持轻量级”是什么意思?
    • 我的意思是不要给它添加很多属性。只需在整个应用程序中保留您经常需要的东西。您可以在需要时从数据库中获取所有其他字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2010-12-16
    • 2013-08-29
    相关资源
    最近更新 更多