困惑的会话和身份验证

时间:2014-03-13 20:38:40

标签: c# asp.net-mvc-3 session session-variables sqlmembershipprovider

我使用Session来存储一些值,它工作正常。当这些值为null时,我需要处理这个问题。通常,他们首次访问网站时会在登录页面设置这些值。

1 ..我是否需要检查身份验证以查看会话是否已过期?

让我感到困惑的是这篇文章:How to Check whether Session is Expired or not in asp.net

回复正在使用Session和IsAuthenticated用于相同的目的。

2 ..身份验证是使用Session还是同一个?

3 .. SessionId是否会在该浏览器窗口中过期或更改?

我注意到SessionId是在他们打开浏览器页面时创建的,至少我假设这个。所以,如果我错了,请纠正我。

4 ..我是否检查他们是否经过身份验证,以确定我的会话变量是否仍然有效?

这就是我想要检查的每个控制器方法,以查看Session变量是否有效以及它们是否经过身份验证:

  if (!HttpContext.User.Identity.IsAuthenticated)
  {
    Logging.WriteLog("User.Identity.Authenticated returned false");
    return RedirectToAction("Logon", "Account");
    //return View("Logon");
  }

5 ..我有正确的想法吗?

请为我清除一些内容!

2 个答案:

答案 0 :(得分:1)

ASP.NET Session基于唯一的用户/浏览器ID,并在cookie中设置。会话应该在整个用户的浏览会话中有效。当用户关闭浏览器时,该cookie将被删除,会话结束。它与您正在使用的任何身份验证分开 - 尽管您可以在身份验证过程中设置/删除值。

答案 1 :(得分:1)

在ASP.NET中,Session完全独立于身份验证。

如果您正在使用表单身份验证,则表单身份验证票证将存储在与身份验证Cookie无关的表单身份验证Cookie中。

一般情况下,特别是如果您正在使用InProc会话,最好假设会话可以随时过期,例如因为AppDomain在服务器上被回收。

理想情况下,测试null,并从持久存储(如数据库)重新创建Session对象(如果它为null)。如果这是不可能的,您必须将用户重定向到目标网页并让他重新开始。