0

我正在尝试检测 Asp.NET 会话超时以将用户重定向到超时页面;我检查了各种方法,其中大多数类似于

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");
                    }
                }
            }
        }
    }
}

全球.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)
        {

        }
    }
}

网页配置

<?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. 为什么?

4

1 回答 1

0

当您开发您的网站时,您不必使用 cookie。还有其他存储数据的方法,例如您可以将特定于用户的数据存储在数据库中

请注意,元素的"Cookieless = false"属性意味着当前会话的 sessionID 将作为 cookie 保存在客户端计算机中SessionStateweb.config

<sessionState cookieless="true" />

ASP.NET会话状态的默认设置在machine.config文件中定义,并且可以web.config在应用程序根文件夹中的文件中覆盖。通过确保上述行出现在根web.config文件中,您可以启用无 cookie 会话

请参阅http://msdn.microsoft.com/en-us/library/aa479314.aspx

所以只检查Session.IsNewSession并禁用cookie

于 2013-05-03T10:09:33.647 回答