0

Asp.NET セッション タイムアウトを検出して、ユーザーをタイムアウト ページにリダイレクトしようとしています。私はさまざまな方法をチェックしましたが、それらのほとんどは

http://aspalliance.com/520_Detecting_ASPNET_Session_Timeouts.2

(Session.IsNewSessionASP.NET_SessionId cookieが存在する場合はタイムアウト)

問題は、デバッグを開始したばかりであっても、「ASP.NET_SessionId」Cookie が常に存在するため、Web サイトを初めて起動するときに常に誤ったタイムアウト フラグが表示されることです。

更新: テストのために、次のコードを使用して空の Asp.NET Web アプリケーションを作成しました。

BasePage.cs

using System;
using System.Web.UI;

namespace TestApp.classes
{
    public class BasePage : Page
    {
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if (Context.Session != null)
            {
                if (Session.IsNewSession)
                {
                    string szCookieHeader = Request.Headers["Cookie"];
                    if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
                    {
                        Response.Redirect("sessionTimeout.htm");
                    }
                }
            }
        }
    }
}

Global.asax

using System;

namespace TestApp
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {

        }

        protected void Session_Start(object sender, EventArgs e)
        {
            var a = "";
        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {
            var b = "";
        }

        protected void Application_End(object sender, EventArgs e)
        {

        }
    }
}

WebForm1.aspx

using System;
using TestApp.classes;

namespace TestApp
{
    public partial class WebForm1 : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

Web.config

<?xml version="1.0"?>
<configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
      <sessionState timeout="1"></sessionState>
    </system.web>

</configuration>

次に F5 を押すと、i が にリダイレクトされsessionTimeout.htmます。なんで?

4

1 に答える 1