[英]How does the baseclass call the Session_End method from Global.asax?
我想在用户会话期满后将其重定向到登录页面。 我创建了一个基础页面,该基础页面将由文件后面的每个aspx代码继承。
我真正想知道的是,一旦会话超时调用了Session_End()方法,您如何才能将basepage方法设置为自动执行重定向?
我已经在Google上搜索了一个多小时,以寻求解决方案,但是仍然很短。
我以前从未使用过global.asax页面,这是我第一次创建基础页面,因此任何建议或解释都将非常感谢
我认为这是不可能的,因为当Session_End被触发时,用户长时间处于不活动状态,并且可能已经关闭了连接。
您需要做的是在所有页面中运行某种javascript计时器,该计时器将在用户过期后将其重定向。
亲切的问候,
埃德温。
您的问题: how can you set the basepage method to automatically perform the redirect once the Session_End() method has been called on session timeout
您可以从global.asax文件中调用基本页面方法。 您将在Session_End()中调用此方法[在会话过期或结束时调用]。 在此basePage方法中,放入用于重定向的自定义逻辑。
但是,您应该同意,如果需要从外部调用PAGE方法,那么在一定程度上肯定是不好的设计。
Base.aspx:
public class BasePage : Page
{
public static void MyMethod()
{
...
}
}
Global.asax中
void Session_End(object sender, EventArgs e)
{
BasePage.MyMethod();
}
请参阅此帖子以获取更多详细信息: http : //forums.asp.net/t/1426012.aspx/1
好吧,身份验证基于Cookie(至少是表单身份验证,对于基于Windows的身份我不确定)。 当您收到没有关联会话的经过身份验证的请求时,只需删除此cookie。 登录后,您将创建会话。
您可以使用以下方式删除auth cokie
FormsAuthentication.SignOut();
在我自己和一个工作同事之间,我们设法解决了这个问题。
解决方法如下:
在我的应用程序中,我使用了一个会话变量来存储用户名。
一旦会话超时,则当然会从内存中清除用户名会话变量。 这是我迫使应用程序返回索引页面所需的触发器。
解
第一步:
//在基类中输入以下代码
protected override void OnLoad(EventArgs e)
{
if (Session["username"] == null)
{
Response.Redirect("~/SessionTimeout.aspx");
}
base.OnLoad(e);
}
第二步:
对于文件后面的每个aspx代码(即Web表单的aspx.cs文件),而不是从默认页面(System.web.UI.Page)继承,都从基页继承:
public partial class SessionTimeout : BasePage
{
}
最后一步:
设置sessionState属性
<sessionState mode="InProc" cookieless="false" timeout="30"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.