页面加载时Response.Redirect不起作用

时间:2012-11-23 17:37:13

标签: c# asp.net response.redirect pageload

我有两个页面,一个登录页面和一个page1。用户无法直接导航到page1,因为它包含以下pageload事件的代码。用户被重定向到登录页面。

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("loginpage.aspx");
}

当用户点击pag1上的注销时,他/她在设置Session["role"]=null后被重定向到登录页面。现在,在登录页面上,如果用户点击浏览器后退按钮,他/她就可以导航到page1。 仅在这种情况下 Response.Redirect("loginpage.aspx");在pageload事件中不起作用。 为什么不起作用?如何使其工作,或者如何阻止用户在此方案中访问page1?

上次我用一种不同的方式问code to detect browser back button click for any(all) browser

,我一直无助和闭门

编辑为了回答答案:针对退出按钮的代码是

protected void btnLogOut_Click(object sender, EventArgs e)
{
    Session["role"] = null;
    Session.Abandon();
    Response.Redirect("login.aspx");
}

4 个答案:

答案 0 :(得分:2)

您在后面看到的页面可能只是一个缓存版本。

最简单的方法可能是,不使用响应重定向,而是回显元刷新。你需要确保会议也很清楚。

Session.Abandon();
Response.Write("<meta http-equiv='refresh' content='0';URL='loginpage.aspx'>");
Response.End();

如果用户点击回来,他们会再次点击该页面,然后退回到您想要的网址。没有什么可以阻止他们多次快速回击或者从历史记录中选择Page1下拉并获得缓存版本。

答案 1 :(得分:1)

这应该肯定有用,检查你的Session [“角色”],我认为它永远不会为空

退出时

执行此操作

Session.Abandon();

'pageoad不工作'在这种情况下,页面执行的原因不会影响页面循环,加载事件总是在页面执行时触发。

因此,如果Page_Load有时不运行,那是因为页面已缓存且未在服务器上执行。该页面可以缓存在浏览器中,在路径中的某个路由器中,或者使用服务器端页面缓存在服务器上缓存。

如果您尚未为该页面启用服务器端页面缓存,则会将其缓存在浏览器或网络中。您可以使用缓存设置来尝试消除此问题:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

这将使页面在正常情况下不被缓存。 (还要检查您的浏览器是否处于脱机模式,然后它将使用缓存中的任何内容,无论其缓存设置如何。)

答案 2 :(得分:0)

你可以尝试这样的事吗

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("~/loginpage.aspx");
}

确保在注销时重置会话[“角色”] = null ,因为此值将在网络会话期间保留

答案 3 :(得分:0)

听起来我需要删除Session [&#34; role&#34;]值并将其设置为null。当用户注销时,我不认为您正在清除会话值,因此当他们浏览您的页面时,仍然认为他们有一个有效的登录会话。

测试是否是这种情况的一种简单方法是在if块中放置一个断点,在那里检查Session [&#34; role&#34;] == null。如果您从未点击该断点,则您知道该角色不为空且它们在技术上仍然是#34;已登录&#34;。