0

在我的 Asp.Net MVC 3 应用程序中,我有一个自定义会话过期处理程序属性过滤器,它在调用控制器操作之前检查会话是否过期。

如果会话已过期,自定义过滤器将用户从表单身份验证中注销,并将用户重定向到登录页面。我也知道,当用户访问授权内容时授权失败,将会发生相同的操作流程。

在这种情况下,会话或身份验证超时会产生相同的效果(用户退出表单身份验证并重定向到登录页面),主要关心的是 Timeout(Session) 是大于还是小于 Timeout(验证)?

4

1 回答 1

0

如果我正确理解您的问题,您的授权属性可能是这里的看门人。问题是当您的会话在您的表单身份验证令牌之前超时时,例如在应用程序池重新启动的情况下。听起来您正在处理这个问题(如果没有,我已经为此编写了代码)。在相反的情况下,您需要确保您不依赖会话中的任何内容来进行非身份验证页面/操作,否则当用户可以匿名访问该页面时,您将面临期望会话值的风险。除此之外,我想不出其他情况是否会导致问题。

您的 auth 属性应始终捕获这种情况并重定向到再次启动会话的登录页面。

但要注意会话——同时针对该用户的多个请求(即 Ajax 请求)访问会话对象一次只会处理一个,因为默认情况下该用户的会话是锁定的。

其他请求将真正挂起,直到访问会话对象的其他请求完成。如果只有主请求访问会话,而该用户的其他重叠请求(如果有的话)没有,这不是问题。

于 2012-10-31T06:27:16.163 回答