如何检测SessionState是否已过期?

问题描述 投票:2回答:7

检测SessionState是否死亡以将用户发送到“会话已过期”页面的最佳方法是什么?我已经成功配置了应用程序(在Web.config中)以在身份验证cookie消失(有相应设置)时执行此操作,但是到目前为止,我还没有找到一种有效的方法来在SessionState上执行类似操作离开了。有问题的应用程序在Session中保存了一些数据,如果其中任何一个都消失了,则应向用户显示“会话已过期-请重新登录”页面。

到目前为止,我可以想到的唯一选择是在我访问的每个地方Session,但这显然不是最佳解决方案。

asp.net session
7个回答
1
投票

为什么不在母版页上包含会话检查?如果会话已过期,则任何会话变量都将返回null。因此,在page_load上您可以检查其中的任何一个并执行相应的操作,即Response.Redirect。但是,您说在Web.Config中可以检查身份验证cookie何时消失,因此您不能对此执行操作吗?

另一种方法是使用HTTP Module,它将拦截每个请求并决定如何处理。这将比我的第一种方法更好,它将在任何页面处理之前发生。


4
投票

我记得一个类似的问题。实际上,您机会不多。

[我的意思是,您无法在服务器触发SessionEnd事件时将用户重定向到页面,您可以在Global.asax中处理该事件。

但是,如果您从页面内部使用Session对象,您可以做一些有用的事情。例如,将Session ID保存在页面的上下文中或隐藏字段中。回发时,将保存的ID与会话ID进行比较。如果它们不同,则开始新的会话,这意味着旧会话已过期。

现在是时候重定向用户了:)

希望对您有所帮助。


3
投票

是的,很难。 :)

没有真正的简单/确定的方法来做。

[一种选择是在Session_Start(global.asax)期间,将Session /]贴在Session []集合中,然后在基础页(例如母版)的Page_Load中检查该值。

另一种选择是检查实际的ASPX cookie:

HttpCookie sessionCookie = Request.Cookies["ASP.NET_SessionId"];

如果为空,则会话结束。


1
投票

当客户端登录时,您给他一个会话标记,就像未过期一样,将其设置为1。

然后您编写一个Web模块,该模块在每个http请求上检查notexired = 1。如果该检查抛出异常或为0,则可以拒绝访问或重定向到错误页面。

或者如果您将会话保存到数据库中,则可以从数据库中更新会话。

通常,它也可以与AJAX处理程序一起使用,与基础页类黑客不同。


1
投票

互联网上有很多例子可以解决您的问题(这很常见)

看看

http://geekswithblogs.net/shahed/archive/2007/09/05/115173.aspx


0
投票

另一种方法是检查存储库会话值是否得到维护。在我的情况下,我们有一个哈希表,并记录会话ID,然后每次需要该会话时,我们都会检查该值是否仍然存在。一种集中式的方式来使您的应用保持会话状态希望这会有所帮助/


0
投票

在所需页面的Page_Load事件中签出此属性:

Dim sessionExpired as Boolean = Context.Session.IsNewSession

有关更多信息,请访问this link

注意,会话状态的“实时性”默认设置为20分钟,但这可以通过timeout属性在应用程序的web.config中轻松更改:

<system.web>
<!--Set default timeout for session variables (default is 20 minutes, but was changed to 30 minutes-->
    <sessionState mode="InProc" cookieless="false" timeout="30" />       
</system.web>

此外,请在MSDN上查看其他属性modecookieles。它可以帮助扩展您当前业务状况的有效性。

© www.soinside.com 2019 - 2024. All rights reserved.