0

我是 ASP.Net 的新手,我有一个基本问题。我试图找到答案,但我失败了。

我使用会话变量通过我的网络应用程序中的页面携带记录的用户 ID。

 if (Session["LoggedUserKey"] == null)
 {
     Session.Add("LoggedUserKey", UserID);
 }
 else
 {
     Session["LoggedUserKey"] = UserID;
 }

我不确定会话超时到期后会发生什么?我会丢失我的用户 ID 吗?当我询问会话变量时,会话超时将延长,例如:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["LoggedUserKey"] == null)
    {
         Response.Redirect("~/Login.aspx");
         return;
    }
}
4

3 回答 3

3

您正在检查是否LoggedUserkeynull.. 如果是您正在添加UserId您可能必须从 TextBox 到LoggedUserkey. else部分的目的是什么?什么时候LoggedUserkey已经有了,UserId或者为什么要UserId再次添加?UserId在会话到期的那一刻,您已经丢失了。

第二个代码很有意义..一旦您的会话到期。(默认为 20 分钟后)如果Session["LoggedUserKey"] == null您将用户重定向到 Login.aspx 页面,则在页面加载。

另请注意,每次与服务器交互时都会重置超时会话。例如刷新页面或与服务器交互的任何活动。

于 2013-09-05T11:47:55.230 回答
2

当会话到期或发生会话超时时,将Session_End引发 global.asax 中的事件(除非会话由 DB 处理)并且最终清除会话集合。

如果任何对象没有持有对会话集合中任何值的引用,则 GC 将收集它。然而,关于 GC 何时会删除这些对象,我们不能说太多。

此外,关于会话超时是否延长timeout,如果不再从客户端收到请求,则表示当前会话必须经过的当前分钟数将被放弃。可以通过编程方式更改此值,让您有机会在更重要的操作需要时使会话集合保持更长时间。

因此,结论是当用户在超时期限之前执行某些活动时,会话确实会延长。如果用户在超时期限后进行某些活动,会话肯定会过期,用户将被重定向到登录页面或根据您的设置执行适当的后续步骤。

于 2013-09-05T12:09:32.367 回答
1

当会话超时时您的会话已过期您可以在 web.config 中将会话超时延长为

<sessionState timeout="60"></sessionState>

那么会话将在 60 分钟内到期,您可以在此设置您的自定义时间。会话到期时您根本无法获取用户 ID。例如会话超时只有几分钟的银行网站。在这些之后,如果您没有及时向服务器发送任何请求,则必须开始一个新会话,而不是会话超时

于 2013-09-05T11:43:18.950 回答