ale*_*nso 10 .net c# asp.net forms-authentication exception
如果会话已过期且用户单击指向另一个webform的链接,则asp.net身份验证会自动将用户重定向到登录页面.
但是,有些用户没有点击指向其他网络表单的链接.例如:在gridviews中编辑链接,当使用带有文本框的AutoCompleteExtender并且应用程序尝试获取信息时,基本上,在每种情况下,当回发完成并且事件不是由asp.net身份验证自动处理时.
处理这些异常的最佳方法是什么?
更新:我刚刚修改了问题标题:表单身份验证超时,而不是初始会话超时.谢谢你让我意识到这种差异.
更新:我刚刚针对我面临的具体问题创建了一个新问题:如何使用UpdatePanel处理因过期身份验证票据而导致的异常?.令人惊讶的是,我没有找到关于它的更多信息.我将衷心感谢您的帮助.
Ada*_*SFT 10
这就是为什么许多系统在页面上包含计时器以给出大致的超时时间.交互式页面很难实现.你真的需要挂钩ajax函数并查看返回状态代码,这有点困难.一种替代方法是使用基于以下内容的代码,该代码在页面生命周期的早期运行并执行ajax重定向到登录页面.否则你会试图拦截来自ajax和asp.net的返回代码,其中ajax是为你做的(即不是像jQuery这样的手动方法)你会失去这种易于检测的能力.
快速入侵你可以直接在pre_init http://forums.asp.net/t/1193501.aspx上试试
编辑 表单身份验证超时所需的内容,而不是会话超时.表单身份验证超时的运行时间与会话超时不同.会话超时随每个请求更新.表格身份验证票据实际上没有更新,直到有一半的时间流逝.因此,如果您将超时设置为一小时并在一个请求中发送25分钟,则会话将重置为一小时超时,表单身份验证票未触及并在35分钟后到期!要解决此问题,请同步会话超时和表单身份验证票证.这样您仍然可以只检查会话超时.如果您不喜欢这样,那么仍然 - 执行以下操作并同步超时,然后解析身份验证票并读取其超时.您可以使用FormsAuthentication.Decrypt执行此操作 - 请参阅:
请注意,此代码要求在登录时设置一些会话值 - 在本例中为"UniqueUserId".同时更改下面的登录页面路径以适合您的.
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
//Only access session state if it is available
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
//If we are authenticated AND we dont have a session here.. redirect to login page.
HttpCookie authenticationCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authenticationCookie != null)
{
FormsAuthenticationTicket authenticationTicket = FormsAuthentication.Decrypt(authenticationCookie.Value);
if (!authenticationTicket.Expired)
{
if (Session["UniqueUserId"] == null)
{
//This means for some reason the session expired before the authentication ticket. Force a login.
FormsAuthentication.SignOut();
Response.Redirect("Login.aspx", true);
return;
}
}
}
}
}
| 归档时间: |
|
| 查看次数: |
9190 次 |
| 最近记录: |