我正在尝试检测Asp.NET Session Timeout以将用户重定向到超时页面;我检查了各种方法,其中大多数类似于
http://aspalliance.com/520_Detecting_ASPNET_Session_Timeouts.2
(如果Session.IsNewSession
和ASP.NET_SessionId cookie
存在,则为超时)
问题是“ASP.NET_SessionId”cookie始终存在,即使我刚刚开始调试,因此在第一次启动网站时总是给我一个错误的超时标记。
更新: 为了测试,我刚刚创建了一个空的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,我将被重定向到sessionTimeout.htm
。为什么呢?
答案 0 :(得分:0)
开发网站时不必使用cookie。存在其他存储数据的方式,例如您可以在数据库中存储特定于用户的数据
请注意"Cookieless = false"
中SessionState
元素的web.config
attrubute,这意味着当前会话的sessionID将作为Cookie保存在客户端计算机中
<sessionState cookieless="true" />
ASP.NET
会话状态的默认设置在machine.config
文件中定义,可以在应用程序根文件夹的web.config
文件中覆盖。通过确保上述行出现在根web.config
文件中,您可以启用无Cookie会话
参考http://msdn.microsoft.com/en-us/library/aa479314.aspx
因此请仅检查Session.IsNewSession
并禁用Cookie