我正在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默认页面的设置,以便页面重定向到我想要的位置,这可能吗?
答案 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>