子窗口重定向

时间:2011-12-11 15:46:35

标签: c# asp.net redirect childwindow

我正在asp.net开发一个网站& C#。我对javaScript不是很熟悉,但我正在使用一些东西。为了创建弹出窗口,我使用了以下javaScript代码:

<script type="text/javascript" language="javascript">
function OpenCallUpdatePop(popUrl) {
CallUpdatePop = window.open(popUrl, 'callUpPop', 'toolbar=no, location=yes, scrollbars=yes, width=900, height=700')
    setTimeout('CallUpdatePop.scroll(0,100)', 1000)
}
</script>

参数popUrl由以下c#代码填充:

string updateUrl = string.Format("UpdatePopUpPage.aspx");
ClientScript.RegisterStartupScript(this.GetType(), "myScript", "<script language=JavaScript>OpenCallUpdatePop('" + updateUrl + "');</script>");

我在会话超时之前在页面上设置了一个计时器几秒钟,以便重定向到Logout页面,其中FormsAuthentication.SignOut();发生了。 LogOut页面的Response.Redirect()无法在子窗口中工作,所以我尝试了一个javaScript函数:

function closeThis() {
self.close()
}

从以下c#sharp代码调用:

protected void timerLogOut_Tick(object sender, EventArgs e)
{
    ClientScript.RegisterStartupScript(this.GetType(), "myScript", "<scriptlanguage=JavaScript>closeThis();</script>");

}

页面未关闭,而是重定向到默认页面,即LogIn页面,但我希望它重定向到LogOut页面。 我怎样才能让子页面关闭或重定向到LogOut页面或任何其他页面?另一种可能性是从c#代码更改web.config默认页面的设置,以便页面重定向到我想要的位置,这可能吗?

1 个答案:

答案 0 :(得分:0)

最可能的问题是您没有可用于匿名访问的LogOut页面,并且在完成页面导航之前会话实际超时。

当发生这种情况并且您在web.config中为表单身份验证块指定了loginUrl时,ASP.Net将自动将用户重定向到登录页面。

为了检测这种行为,我们添加了一个特殊的查询字符串参数,以便我们知道用户是否由于自动重定向而到达登录页面:

 <authentication mode="Forms">
    <forms name=".MYAUTH" loginUrl="default.aspx?reauth=1" protection="All" path="/" slidingExpiration="true" timeout="60" />
  </authentication>

您可以通过将以下内容添加到web.config来确保始终可以访问注销页面:

  <location path="logout.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

如果注销页面的目的只是为用户提供有关发生的事情的一些信息,那么您实际上可以完全退出注销页面,只需依靠auto-redirect querystring参数在用户提供消息时返回登录页面。例如,在登录页面中:

<script language="javascript" type="text/javascript">
    <!--
    if (window.location.search != "") {
        if (window.location.search.indexOf("reauth=1") != -1) {
            alert("Your login credentials have expired. Please log in again to continue.");
        }
    }
    -->
</script>