الوصول إلى جلسة في خدمة الخلفية باستخدام httpModule

StackOverflow https://stackoverflow.com/questions/582222

  •  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;
    }
}

المشكلة هنا هي أنني لا أستطيع الحصول على قيمة الجلسة بطريقة التدقيقات الحرارية. انها دائما فارغة. كيف يمكن الحصول على الجلسة هنا.

لقد نظرت في هذه الحل ولكن لا يساعد.

هل كانت مفيدة؟

المحلول

أخشى أنك على الطريق الصحيح هنا. لا يمكنك تطبيق خدمة خلفية باستخدام httpmodule مثل هذا. يرتبط httpccontext أنت تمر بطلب HTTP، وأنا متأكد من أنك يجب أن لا تبقيه مثلك كما تحاول القيام به. أيضا حتى إذا كنت تستطيع اكتشاف وقت الجلسة، فلن تكون هناك طريقة لإعادة توجيه المستخدم إلى صفحة جديدة دون طلب نشط.
قد تجد هذا الموضوع معاون، مساعد، مفيد، فاعل خير.

نصائح أخرى

أعتقد أن هناك خطأ منطقي هنا، حتى إذا قمت بإصلاح التعليمات البرمجية الخاصة بك، فلن تحصل أبدا على جلسة انتهت.

إذا كان بإمكانك الوصول إلى جلسة، فسوف يكون لها جلسة. لا يمكنك الحصول على جلسة انتهت بواسطة مهلة بهذه الطريقة.

ربما يجب عليك استخدام Session_end Global.asax. لكنني لست متأكدا من ذلك سوف يساعد.

أيضا هنا يمكنك أن ترى، لا يتم استبدال SessionID حتى session.abandon.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top