【问题标题】:How to redirect to home page after session timeout会话超时后如何重定向到主页
【发布时间】:2011-06-07 11:20:05
【问题描述】:

我正在开发一个网站,我想在会话超时后重定向到主页。 谁能帮我解决这个问题。

【问题讨论】:

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


    【解决方案1】:
    【解决方案2】:

    这是在 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#代码

    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 事件中检查它,如果会话不为空,则用户将能够访问该页面,否则他将被重定向到登录页面。

    在这个页面我只是放了一个按钮去主页

    <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 从该类中驱动所有页面。 UI.Page 每次加载页面时都会检查所有页面的会话超时

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

    【讨论】:

      猜你喜欢
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 2012-09-12
      • 2012-05-04
      • 1970-01-01
      相关资源
      最近更新 更多