Asp.NET セッション タイムアウトを検出して、ユーザーをタイムアウト ページにリダイレクトしようとしています。私はさまざまな方法をチェックしましたが、それらのほとんどは
http://aspalliance.com/520_Detecting_ASPNET_Session_Timeouts.2
(Session.IsNewSession
とASP.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
ます。なんで?