我使用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 ..我有正确的想法吗?
请为我清除一些内容!
答案 0 :(得分:1)
ASP.NET Session
基于唯一的用户/浏览器ID,并在cookie中设置。会话应该在整个用户的浏览会话中有效。当用户关闭浏览器时,该cookie将被删除,会话结束。它与您正在使用的任何身份验证分开 - 尽管您可以在身份验证过程中设置/删除值。
答案 1 :(得分:1)
在ASP.NET中,Session完全独立于身份验证。
如果您正在使用表单身份验证,则表单身份验证票证将存储在与身份验证Cookie无关的表单身份验证Cookie中。
一般情况下,特别是如果您正在使用InProc会话,最好假设会话可以随时过期,例如因为AppDomain在服务器上被回收。
理想情况下,测试null,并从持久存储(如数据库)重新创建Session对象(如果它为null)。如果这是不可能的,您必须将用户重定向到目标网页并让他重新开始。