1

我试图限制未经授权的用户访问Utilities.aspx页面并将他重定向到Default.aspx页面。

if (authorizedUser.ToLower() != "admin")
{
    if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
    {
        ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "<script>alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.')</script>", true);
        Response.Redirect("Default.aspx");
    }
}

但是,虽然重定向工作正常,但alert页面上没有显示。搜索这个问题告诉我 Response.Redirect 在客户端代码完全呈现之前完成了它的操作。

我怎样才能显示alert之前的Response.Redirect


我也尝试了这两种方法,Page_LoadDefault.aspx都没有奏效。如果设置了某个会话 bariable,则显示警报。

if (Session["unauth"] != null)
{
    ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.');", true);
}


if (Session["unauth"] != null)
{
    form1.Attributes.Add("OnLoad", "javascript:alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.');");
}
4

8 回答 8

3

你不能。

重定向是 HTTP 功能;执行重定向会完全跳过您的页面。

相反,您可以使用更多 Javascript 在警报后执行客户端重定向。
具体来说,设置location.href.

于 2013-06-13T12:36:56.643 回答
3

Response.Redirect正在设置Location浏览器在看到页面上的任何内容之前看到并运行的标题。如果您希望页面实际执行,您必须允许它们首先到达页面,而不仅仅是重定向它们。

例子:

客户要求:

GET /Utilities.aspx HTTP/1.0
Host: www.somehost.com
User-Agent: Mozilla/4.0 (Windows XP)
Accept: text/html, */*

服务器响应:

HTTP 300 OK
Location: /SomeNewPage.aspx      <-- Browser see this and goes
Content-Length: 12345

<html>                           <-- ignores from here down
  ...
  <script>alert('You\'re being redirected');</script>
  ...
</html>

客户新请求:

GET /SomeNewPage.aspx HTTP/1.0
Host: www.somehost.com
User-Agent: Mozilla/4.0 (Windows XP)
Accept: text/html, */*
...
于 2013-06-13T12:37:20.113 回答
3

您不能使用 HTTP 重定向 + javascript。如果您想在重定向之前显示警告消息,则需要使用 100% javascript 解决方案,这会产生一个很大的安全漏洞,很容易导致未经授权访问该页面。

我想说你能做的最好的就是在目标页面上显示一条描述性消息。您可以为此发送一个查询字符串参数。

于 2013-06-13T12:38:35.657 回答
1

我和@ClaudioRedi 一起讨论这个问题。做到这一点的唯一方法是通过 JavaScript,通过以下方式:

  • 即使启用了 JavaScript,也可能被浏览器阻止;
  • 肯定会打开一个安全漏洞。

我的建议是在加载登录页面后显示警报。

于 2013-06-13T12:40:34.487 回答
0

而不是重定向,您可以这样尝试:-

 System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("<script language='javascript'>");
                sb.Append("alert('hello');window.location.href=\"page2.aspx\"");
                sb.Append("</script>");

 ClientScript.RegisterStartupScript(typeof(Page), "anything", sb.ToString(), true);
于 2013-06-13T12:42:55.077 回答
0

您需要使用客户端重定向到另一个页面。

if (authorizedUser.ToLower() != "admin")
    {
        if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
        {
    ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.'); window.location.href = 'Default.aspx';", true);

       }
    }
于 2013-06-13T12:43:36.467 回答
0

在添加警报后在 javascript 函数中尝试此操作

top.location='default.aspx';

现在你的代码就像

if (authorizedUser.ToLower() != "admin")
{
    if (!ClientScript.IsClientScriptBlockRegistered("UnauthorizedUserRedirect"))
    {
        ClientScript.RegisterStartupScript(this.GetType(), "UnauthorizedUserRedirect", "<script>alert('Unauthorized access!\n\nYou have attempted to access a page that you are not authorized to view.');top.location='Default.aspx';</script>", true);

    }
}
于 2013-06-13T13:02:38.373 回答
0

尝试使用

ClientScript.RegisterStartupScript(Page.GetType(), "", script,true);

不是

this.GetType() 

Page.GetType()
于 2013-06-13T12:41:31.213 回答