如何在会话超时后重定向到主页

时间:2011-06-07 11:20:06

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

我正在开发一个网站,我希望在会话超时后重定向到主页。 任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

这是在ASP.NET中检测会话超时和重定向到登录页面的示例,当用户在web.config文件中指定的时间空闲时会发生会话超时。

为此,我将web.config中的超时值设置为1分钟。

第一种方法

在web.config文件中,将sessionstate模式设置为inproc,将身份验证模式设置为Forms

<system.web>
    <compilation debug="true"/>
    <authentication mode="Forms"/>
    <sessionState mode="InProc" cookieless="false" timeout="1"></sessionState>
</system.web> 

我在这个例子中创建了三个页面,一个是登录页面,当会话到期时,我重定向到这个页面,一个是导航页面,我将检查会话是否有效,如果它是有效的,用户将看到此页面,他将被重定向到登录页面。

在您的应用程序或网站的根目录中添加Global.asax类文件。 仅当应用程序中存在Global.asax时,此方法才有效。

在我们要检查会话超时的页面的Page_Init事件中写下面提到的代码。

我们也可以将这些代码放在一个类中,并从该类继承应用程序的所有页面,作为所有页面的基类来检查会话超时。

C#CODE

protected void Page_Init(object sender, EventArgs e)
{
    if (Context.Session != null)
    {
        if (Session.IsNewSession)
        {
            HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"];
            if (newSessionIdCookie != null)
            {
                string newSessionIdCookieValue = newSessionIdCookie.Value;
                if (newSessionIdCookieValue != string.Empty)
                {
                    // This means Session was timed Out and New Session was started
                    Response.Redirect("Login.aspx");
                }
            }
        }
    }
}

第二种方法。

Default.aspx的代码

<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC
          "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="btnSessionStart"
                        runat="server"
                        OnClick="btnSessionStart_Click"
                        Text="Start Session" /><br />
            <br />
            <br />
            <asp:Button ID="btnCheck"
                        runat="server"
                        OnClick="btnCheck_Click"
                        Text="Check Session ID" />
            <br />
            <asp:TextBox ID="txtSession"
                         runat="server"
                         Width="266px">
            </asp:TextBox><br />
            <br />
            <asp:Button ID="btnGO"
                        runat="server"
                        OnClick="btnGO_Click"
                        Text="Go to Other Page" />
            <br />
            <br />
        </div>
    </form>
</body>
</html>

此页面背后的代码就像

protected void btnSessionStart_Click(object sender, EventArgs e)
{
    Guid Session_id = Guid.NewGuid();
    Session["SessionID"]
    = Session_id.ToString();

}
protected void btnCheck_Click(object sender, EventArgs e)
{
    if (Session["SessionID"] != null)
        txtSession.Text =
        Session["SessionID"].ToString();
    else
        txtSession.Text =
        "Session has expired";
}
protected void btnGO_Click(object sender, EventArgs e)
{
    Response.Redirect("Default2.aspx");
}

在我们要检查会话是否已超时的页面上,我们需要在页面的Page_Init事件中检查它,如果session不为null,则用户将能够转到页面其他明智的他将被重定向到登录页面。

在这个页面中,我只是按了一个按钮进入主页

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="btnHome"
                        runat="server" OnClick="btnHome_Click"
                        Text="Home" />
        </div>
    </form>
</body>
</html>

此页面背后的代码是

protected void Page_Init(object sender, EventArgs e)
{
    CheckSession();
}
protected void btnHome_Click(object sender, EventArgs e)
{
    Response.Redirect("Default.aspx");
}

private void CheckSession()
{
    if (Session["SessionID"] == null)
    {
        Response.Redirect("Login.aspx");
    }

}

如果我们需要在应用程序的所有页面中检查这个,那么我们可以创建一个BaseClass并编写上面提到的CheckSession和Page_Init部分的代码,并通过键入BaseClassName来代替System.Web来驱动此类中的所有ur页面。 UI.Page,它将在每次加载页面时检查所有页面的会话超时

来源:http://csharpdotnetfreak.blogspot.com/