会话超时后自动重定向到登录

时间:2012-07-31 14:42:45

标签: c# asp.net redirect login session-timeout

我正在尝试在会话超时后自动重定向到我的登录页面。 我尝试在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 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:1)

AppendHeader被记录为在发送HTTP标头后附加“标头”时导致异常。您需要确保在发送HTTP标头之前调用AppendHeader。 Load事件可能为时已晚,具体取决于您的母版页。您可以尝试Init事件。

答案 2 :(得分:1)

以下是我的一个例子:

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

如果您有此功能,则无需自行检查超时cookie。这假设您正在使用表单身份验证。

答案 3 :(得分:0)

我认为你需要使用Refresh代替`重定向&#39;在标题中:

Response.AppendHeader("Refresh",
    Convert.ToString((Session.Timeout * 60) - 3) +
    ";URL=~/Login.aspx");