繁体   English   中英

困惑的会话和身份验证

[英]confused on sessions and authentication

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

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

令我困惑的是这篇文章: 如何在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 ..我有正确的想法吗?

请为我清除一些内容!

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM