C# 在何处筛选会话过期

C# 在何处筛选会话过期,c#,asp.net,session,C#,Asp.net,Session,下面是我注意到的问题,当用户会话过期时,他/她单击web应用程序上的链接,例如 它们被带到页面,而不是注销或新登录页面 我想在某个地方写一些代码,这样在它到达页面之前,它会检查一些条件。我认为每个请求都必须通过global.asax,但显然我上面提到的那一个,不会直接进入页面,在那里它会抛出各种错误。 我可以在每个页面中编写代码,但这一点都不优雅,因此我想在每个请求都必须通过的地方编写代码,无论是否有会话。我假设您已经尝试了global.asax的应用程序。如果这不起作用,您可以尝试创建一个Ht

下面是我注意到的问题,当用户会话过期时,他/她单击web应用程序上的链接,例如 它们被带到页面,而不是注销或新登录页面

我想在某个地方写一些代码,这样在它到达页面之前,它会检查一些条件。我认为每个请求都必须通过global.asax,但显然我上面提到的那一个,不会直接进入页面,在那里它会抛出各种错误。
我可以在每个页面中编写代码,但这一点都不优雅,因此我想在每个请求都必须通过的地方编写代码,无论是否有会话。

我假设您已经尝试了global.asax的应用程序。如果这不起作用,您可以尝试创建一个Http模块。去查阅文档


基本上,Http模块为您提供了连接ASP.Net请求处理的工具,以便您可以添加自定义逻辑。有一个创建模块的详细演练

在助手类中创建CheckSession方法,并从基页第一行的Page_Init调用它,现在所有要验证会话的页面都从该基页继承它们

若会话已过期,CheckSession可以将用户重定向到定义的页面

若会话过期,ASP.NET不会重定向到任何页面,但代码将找不到先前保存在会话中的数据

我认为每个请求都必须通过global.asax,但显然我上面提到的那个请求没有

你想得对,我会集中精力找出为什么global.asax中的事件看起来没有发生

它们被带到页面,而不是注销或新登录页面

如果您使用的是表单身份验证,而不是滚动自己的身份验证,则会话到期和表单身份验证票证的到期无关。因此,您不应该期望用户被重定向到登录页面

转到页面,在那里它会抛出各种错误


您不会说什么错误,但可能是指在会话中尝试访问对象时出现空引用异常。这里的最佳实践是,如果可能的话,只需从持久性存储(例如数据库)以静默方式重新创建会话对象。但如果你不能做到这一点,你应该检查空值,例如重定向到主页。您应该能够在global.asax中的
应用程序\u AcquireRequestState
事件处理程序中执行此操作,这是global.asax中会话可用的第一个事件。

我已编辑了您的标题。请参阅“”,其中一致意见是“不,他们不应该”。它只是在需要检查会话有效性的页面上重复的方法调用,会话检查逻辑不重复。当并非所有页面访问都需要首先登录时,这提供了更好的控制。你能解释一下你在哪里看到“大量代码重复”吗?我注意到你说的是“每页的第一行”。这是大量的重复。我已经改进了答案,建议使用基本页面来避免代码重复。