3

我试图在会话超时后自动重定向到我的登录页面。我尝试在我的 Main.Master 页面中添加此代码(所有其他页面都连接到此母版页):

protected void Page_Load(object sender, EventArgs e)
{
            //Redirects to Login Page 3 seconds before session timeout
            Response.AppendHeader("Redirect", Convert.ToString((Session.Timeout * 60) - 3) + "; URL=~/Login.aspx");
}

我在我的网络配置中将会话超时配置为 1 分钟:

<sessionState mode="InProc" cookieless="false" timeout="1"/>

但什么也没发生

谁能帮我找到这段代码的问题,或者有其他想法如何让它工作?

编辑:来自 web.config 的身份验证节点

<authentication mode="Forms">
    <forms name=".CAuthenticated" loginUrl="Login.aspx" protection="All" 
    timeout="20"/>
</authentication>
4

4 回答 4

3
protected void Page_Init(object sender, EventArgs e)
{
    if (Session["Username"] == null)
    {
        Response.Redirect(ResolveClientUrl("~/login.aspx") + "?returnURL=" + HttpContext.Current.Request.Url.AbsolutePath);
    }
    else
    {
        lblUsername.Text = Session["Username"].ToString();
    }
}
于 2012-09-11T10:44:03.630 回答
1

我认为您需要Refresh在标题中使用而不是“重定向”:

Response.AppendHeader("Refresh",
    Convert.ToString((Session.Timeout * 60) - 3) +
    ";URL=~/Login.aspx");
于 2012-07-31T14:46:46.287 回答
1

AppendHeader如果“在发送 HTTP 标头后附加标头”,则记录为导致异常您需要确保在发送 HTTP 标头之前调用 AppendHeader。根据您的母版页,该Load事件可能为时已晚。你可以试试这个Init活动。

于 2012-07-31T14:53:00.103 回答
1

这是一个对我有用的例子:

    <authentication mode="Forms">
      <forms loginUrl="~/Login/Index" defaultUrl="~/Admin" timeout="20">
      </forms>
    </authentication>

如果你有这个,你就不需要自己检查超时 cookie。这是假设您正在使用表单身份验证。

于 2012-07-31T14:58:55.323 回答