0

我正在用 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>");

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

function closeThis() {
self.close()
}

这是从以下 c# 尖锐代码中调用的:

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

}

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

4

1 回答 1

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>

如果注销页面的目的只是向用户提供有关发生的事情的一些信息,那么您实际上可以完全退出注销页面,而仅依靠自动重定向查询字符串参数在用户返回时向用户提供消息登录页面。例如,在登录页面中:

<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>
于 2011-12-11T22:23:36.457 回答