2013-09-05 49 views
0

我是ASP.Net的新手,我有一个基本问题。我试图找到答案,但我失败了。ASP.Net - 会话超时后过去会发生什么

我使用会话变量来通过我的web应用中的页面携带记录的用户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; 
    } 
} 
+0

一旦会话过期,您将失去LoggedUserKey中的userid值。 – Arbaaz

回答

3

您正在检查LoggedUserkey是否null或不..如果您要添加UserId,你可能必须从TextBox获得LoggedUserkey。 其他部分的目的是什么?当LoggedUserkey已经有UserId或者你为什么再次加入UserId?您已经在会话过期时失去了UserId

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

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

1

当会话超时,你可以在web.config中同时能延长会话超时为

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

然后会话将在60分钟内过期,您可以在此给出自定义时间。当会话过期时,您无法获取用户ID。例如会话超时只有几分钟的bannking站点。之后,这些你有,如果你不及时发送到服务器的任何请求开始一个新的会话少他们会话超时

+0

因此,当一些请求被发送到服务器会话生存期重置为定义值? –

+1

yes会话超时是根据发送给服务器的上一次请求计算得出的。 –

2

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

如果任何对象不持有对会话集合中任何值的引用,则GC将收集它。然而,关于GC究竟何时移除这些物体的说法并不多。

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

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