混淆会话和身份验证

本文关键字:身份验证 会话 | 更新日期: 2023-09-27 17:50:04

我使用会话来存储一些值,它工作得很好。当这些值为空时,我需要处理这个。通常这些值是在用户第一次访问网站时在登录页面设置的。

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

让我困惑的是这篇文章:如何检查会话是否在asp.net中过期

出于同样的目的,应答使用Session和IsAuthenticated。

2 . .身份验证是否使用会话,或者它们是同一个?

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 . .我的想法对吗?

请帮我澄清一下!

混淆会话和身份验证

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

. NET, Session是完全独立于身份验证的。

如果你正在使用表单认证,一个表单认证票据被存储在一个表单认证cookie,它与会话cookie无关。

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

理想情况下,测试是否为空,如果它为空,则从持久存储(如数据库)重新创建Session对象。如果这是不可能的,你必须重定向你的用户到一个登陆页面,让他重新开始。