我试图创建在asp.net背景服务,其检查会话超时,用户超时页面(未登录页)重定向。我的代码是这样的

public class SessionTimeoutModule : IHttpModule
{
    private static Timer timer;
    //Test value
    private const int interval = 1000 * 1 * 10;

    public void Init( HttpApplication application )
    {
        if ( timer == null )
        {
            timer = new Timer( new TimerCallback( CheckSessionTimeout ),
                         application.Context, 0, interval );
        }
    }

    private void CheckSessionTimeout( object sender )
    {
        HttpContext ctx = (HttpContext)sender;

        if ( ctx.Session != null && ctx.Session.IsNewSession )
        {
            var cookie = ctx.Request.Headers["Cookie"];
            if ( cookie != null )
            {
                if ( cookie.ToUpper().IndexOf( "ASP.NET_SESSIONID" ) >= 0 )
                {
                    ctx.Response.Redirect( "" );
                }
            }
        }
    }

    public void Dispose()
    {
        timer = null;
    }
}

这里的问题是,我没能获得在CheckSessionTimeout方法会话值。它始终是零。这里怎么能得到会话。

我已经看过解决方案,但它不帮助

有帮助吗?

解决方案

我怕你是在错误的轨道在这里。您不能实现使用这样一个HttpModule后台服务。你绕过的HttpContext被绑定到一个HTTP请求,我敢肯定,你不应该把它周围像你正在试图做的。此外,即使你可以检测会话超时,就没有办法给用户一个新的页面重定向没有活动的请求。 点击 您可能会发现这线程有帮助的。

其他提示

我觉得这是一个合乎逻辑的错误在这里,即使你解决你的代码,你将永远不会得到一个会话结束。

如果您可以访问到一个会议上,将有一个会话ID。你不能得到从而结束因超时而通过这样一个会议。

也许你应该使用Global.asax中的Session_End中。但我不知道它会有所帮助。

此外在这里你可以看到,会话ID没有被替换,直到Session.Abandon。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top