Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 响应。页面加载时重定向无效_C#_Asp.net_Response.redirect_Pageload - Fatal编程技术网

C# 响应。页面加载时重定向无效

C# 响应。页面加载时重定向无效,c#,asp.net,response.redirect,pageload,C#,Asp.net,Response.redirect,Pageload,我有两个页面,一个登录页面和一个页面1。用户无法直接导航到page1,因为它包含pageload事件的以下代码。用户将被重定向到登录页面 if (Session["role"] == null) { Response.Write("Redirect Not Working"); Response.Redirect("loginpage.aspx"); } 当用户单击第1页上的注销时,在设置会话[“角色”]=null后,他/她将被重定向到登录页面。现在在登录页面上,如果用户单击浏

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

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("loginpage.aspx");
}
当用户单击第1页上的注销时,在设置
会话[“角色”]=null
后,他/她将被重定向到登录页面。现在在登录页面上,如果用户单击浏览器后退按钮,他/她可以导航到第1页仅在这种情况下
Response.Redirect(“loginpage.aspx”)无效为什么不起作用?在这种情况下,我如何使其工作,或者如何阻止用户访问page1?

上一次,我以不同的方式问它,我感到无助和封闭

编辑以响应回答:注销按钮上的代码为

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

你能试试这样的吗

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

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

我觉得您需要删除会话[“角色”]值并将其设置回null。当用户注销时,我不认为您正在清除会话值,因此当他们浏览回您的页面时,负载仍然认为他们有一个有效的登录会话


测试是否存在这种情况的一种简单方法是在if块中放置一个断点,在此处检查会话[“role”]==null。如果您从未点击该断点,您就知道该角色不是空的,而且他们在技术上仍然“登录”。

这肯定会起作用,请检查您的会话[“角色],我认为它从不为空

在注销时执行此操作

Session.Abandon();

“pageoad不起作用”在这种情况下,页面执行的原因不会影响页面周期,加载事件总是在页面执行时触发

因此,如果页面加载有时不运行,那是因为页面是缓存的,不会在服务器上执行。页面可以缓存在浏览器中、路由器中,或者使用服务器端页面缓存在服务器上

如果尚未为页面启用服务器端页面缓存,则该页面将缓存在浏览器或网络中。您可以使用缓存设置尝试省去此项:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

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

您在背面看到的页面可能只是缓存版本

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

Session.Abandon();
Response.Write("<meta http-equiv='refresh' content='0';URL='loginpage.aspx'>");
Response.End();
Session.放弃();
回答。写(“”);
Response.End();

如果用户回击,他们将再次点击该页面,并跳转到您希望他们访问的URL。没有任何东西可以阻止他们多次快速回击,或者从历史记录下拉列表中选择Page1并获取缓存版本。

没有Jesse我会在登录时将其设置为null。您可以通过任何方式设置断点,以便我们可以确保响应。当用户按下back时,重定向确实被击中了吗?抱歉,Jesse pageoad不起作用。但是,
Session[“role”]此时为空
,这对于我们了解您的代码是否实际到达响应点非常有用。重定向点。然后我们就可以知道这是重定向本身的问题还是重定向无法到达的问题。你能提供你的整个页面加载方法吗?是@JesseCarter。但是为什么你认为它是必要的呢。因为我从一开始就共享了代码如果pageload就像
void pageload(){my shared code…othercode…}
你能提供或显示更多的代码吗。。?我认为您在页面加载中遇到问题或错误,您正在检查是否(IsPostBack)。。想想网页的生命周期以及在aspx网页中如何触发事件,你也需要结束响应。我最近遇到了这个问题,尽管网页似乎正常工作。我重定向时出现了其他错误。因此,如果你发布更多代码,这会有所帮助。。特别是在Page_Load事件“PageLoad不工作”中,在这种情况下,请尝试删除Page_Load事件并从“属性”窗口重新创建它,这是由于某些tmp文件PageLoad仅在从loginpage返回时不工作,否则它会感谢+1的良好解释。user822711的答案对我有效。无法理解为什么HttpCacheability.NoCache不适合我。他的答案对php也是有效的。你知道
Response.End()的替代方案是什么吗以防我使用php?