我们可以在全局文件的Session_End事件中重新填充会话吗?

时间:2015-05-05 17:12:24

标签: asp.net .net session global-asax

我们可以在global.asax文件的Session_End事件中重新填充会话,如user info,id等,而不是将用户重定向到登录页面,这样用户就不必再次登录了吗?

2 个答案:

答案 0 :(得分:2)

Session_End表示会话已过期。默认会话时间为20分钟。会话也有滑动到期。因此,如果用户在20分钟内未能完成任何请求,则此会话将过期,并且将调用Session_End事件。

如果您需要更大的会话超时,可以在web.config中增加它,如:

<system.web>
    <sessionState timeout="60"  />
</system.web>

但是Session_End事件的重新填充会话对我来说并没有多大意义,因为无论如何用户至少在20分钟内都没有。无论如何,每个会话都将过期,因为服务器需要释放非活动会话使用的内存来处理新会话,而不会浪费旧内存。

答案 1 :(得分:0)

有很多方法可以解决这个问题。当Session_End发生时 - 会话已结束。我在所有页面(或主页面)的顶部都有代码,用于检查会话是否已经消失。我倾向于对用户存储2个GUID,并在用户登录时返回它们。我在用户盒子上的cookie中粘贴一个,在隐藏字段中粘贴另一个(再次,最好在母版页或用户控件中)出现在每一页上)。如果会话超时,我从cookie中检索一个GUID,从隐藏字段中检索另一个GUID,并使用它们返回数据库,检索用户的详细信息并重新填充会话。

在用户全天登录的网站上 - 我使用javascript每15分钟刷新一次会话。在一个相当低端的服务器环境中成千上万的用户 - 从来没有遇到任何问题。