使用访问会话在后台服务的HttpModule
-
06-09-2019 - |
题
我试图创建在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。
不隶属于 StackOverflow