0

这是我注意到的问题,当用户会话过期时,他/她单击 Web 应用程序上的链接,例如 http://www.mywebsite.com/myreport.aspx?picture=1 他们被带到页面,而不是注销或新的登录页面。

我想在某处编写一些代码,以便在它到达 Page_Init 之前检查某些条件..我认为每个请求都必须通过 global.asax 但显然我上面提到的那个并没有直接转到页面,其中它会引发各种错误。我可以在每个页面中编写代码,但这根本不是很优雅,所以我想把它写在每个请求都必须通过的地方,不管有没有会话..

4

3 回答 3

1

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

您想得对,我会集中精力找出 global.asax 中的事件似乎没有触发的原因。

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

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

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

你没有说什么错误,但大概你的意思是尝试访问 Session 中的对象时出现空引用异常。如果可能的话,这里的最佳实践是简单地从持久存储(例如数据库)中默默地重新创建 Session 对象。但是如果你不能这样做,你应该检查 null 并且例如重定向到一个主页。您应该能够Application_AcquireRequestState在 global.asax 中的事件处理程序中执行此操作,这是 global.asax 中 Session 可用的第一个事件。

于 2013-10-19T15:11:02.357 回答
0

我假设您已经尝试过 global.asax 的 Application_BeginRequest。如果这不起作用,您可以尝试创建一个 Http 模块。去这里查看文档。

基本上,Http 模块为您提供了挂钩 ASP.Net 请求处理的便利,以便您可以添加自定义逻辑。这里有一个关于创建模块的详细演练。

于 2013-10-19T13:51:49.873 回答
0

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

如果会话过期 CheckSession 可以将用户重定向到定义的页面。

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

于 2013-10-19T14:25:18.617 回答