【问题标题】:Session expiring and auth cookie remaining会话即将到期和授权 cookie 剩余
【发布时间】:2012-07-10 18:45:09
【问题描述】:

我遇到了会话即将到期的问题,

Session["UserId"] = userId;

但身份验证 cookie 仍然存在,因此 [authorize] 属性仍然允许用户导航系统,直到系统尝试读取会话变量和错误。空异常

对于如何在会话到期时使 auth cookie 消失有什么想法吗?由于我是 ASP.NET MVC 3 的新手,因此我当然会很感激任何见解。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 session forms-authentication


    【解决方案1】:

    这是不好的做法,请参阅this link 以获得更深入的解释。基本上,通过以任何人身份登录,然后获取其他人的会话密钥,您就可以窃取该身份。

    我建议您将用户的 id 嵌入到身份验证 cookie 中,请参阅主题上的 this question。然后,如果您愿意,您可以仅将会话用作缓存,只需将会话 ID 与存储在 auth cookie 中的 ID 进行比较。例如,在 global.asax 中执行此操作,这样您就不必更改您的应用程序

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点。这里只是一个想法。

      public class ControllerBase : Controller
      {
          public ControllerBase()
              : base()
          {
              this.VerifySession();  
          }
      
          /// <summary>
          /// Indicates whether the session must be active and contain a valid customer.
          /// </summary>
          protected virtual bool RequiresActiveSession
          {
              get { return true; }
          }
      
          public void VerifySession()
          {
              if (this.RequiresActiveSession && Session["UserId"] == null)
              {
                  Response.Redirect(Url.Action("LoginPage"));
              }
          }
      
      }
      
      public class HomeController : ControllerBase
      {
          protected override bool RequiresActiveSession
          {
              get
              {
                  return true;
              }
          }
      
          public ActionResult Index()
          {
              return View();
          }
      }
      

      基本上,您有一个控制器库来处理会话验证。并且任何继承自它的控制器都可以指定是否要验证会话。

      或

      您可以创建一个自定义 Action Filter,它允许您在执行控制器操作之前将您的控制器或操作归类并挂钩您的代码到处理管道中。

      【讨论】:

      • 我不建议使用基类,它很乱,你可能想“使用”该基类来做其他事情,例如 web api
      • 我非常喜欢使用动作过滤器而不是从基本控制器派生。有关授权操作过滤器的示例,请参见:stackoverflow.com/questions/996387/…
      • 谢谢你们!!自定义操作过滤器听起来像是要走的路!我的高级开发人员反对将用户数据存储在 cookie 中,就像大多数人反对在劫持时使用会话变量一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      相关资源
      最近更新 更多