我有Default.aspx页面,它继承自BasePage.cs,它继承自System.Web.UI.Page。 BasePage是我检查会话是否超时的地方。当会话超时并且用户点击某些内容时,我需要将用户重定向回“Main.aspx”页面。
以下是我的网页中的代码
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string cookie = Request.Headers["Cookie"];
if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))
{
HttpContext.Current.Response.Redirect("Main.aspx", true);
return;
}
}
}
}
HttpContext.Current.Response.Redirect(“Main.aspx”,true);
我希望重定向停止执行BasePage并立即跳出。问题是,它没有。
当我在调试模式下运行时,它会逐步调整,就好像它不仅仅是重定向和离开一样。 我怎样才能安全地重定向?
答案 0 :(得分:4)
看到您的基类继承自System.Web.UI.Page,您不需要使用HttpContext。不用尝试,看看是否有帮助。
编辑:在response.redirect
附近添加了页面检查if (!Request.Url.AbsolutePath.ToLower().Contains("main.aspx"))
{
Response.Redirect("<URL>", false);
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
答案 1 :(得分:1)
我认为这不是你想要的,但也许这会奏效:
Server.Transfer("<URL>")
答案 2 :(得分:1)
我在Asp.Net MVC 3.0上遇到了同样的问题。 Response.Redirect根本不起作用,所以我找到了使用RedirectToAction方法的简单方法,可以从Controller继承。
public class SessionExpireFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext context = HttpContext.Current;
if (context.Session != null) // check if session is supported
{
if (context.Session.IsNewSession) // if it says it is a new session, but exisitng cookie exists that means session expired
{
string sessionCookie = context.Request.Headers["Cookie"];
if ((sessionCookie != null) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
{
string redirectTo = "~/Account/Expired";
filterContext.Result = new RedirectResult(redirectTo);
}
}
else
{
base.OnActionExecuting(filterContext);
}
}
}
}
这适用于Asp.Net MVC,但这可能会提供使用除Response.Redirect之外的其他内容。
答案 3 :(得分:0)
有时您的页面有错误,您看不到它 请在下面检查此代码
HttpContext.Current.ClearError(); HttpContext.Current.Response.Redirect(“您的目标网址”,false);