2009-08-29 15 views
5

Bazı durumları oturum durumu üzerinden yalnızca bir istek için depolamak istiyorum. Bunu başarmanın kolay bir yolu düşünemiyorum. Bu, ASP.NET MVC'nin TempData nesnesinin yaptığı tam olarak'dur. Herkes bana bir bağlantı verebilir veya oturum durumundaki bir nesneye nasıl sahip olabileceğine dair bazı örnekler yalnızca bir ek istek daha alabilir mi?TempData Like WebForms'taki Nesne - Oturum Durumu yalnızca 1 Ekstra İstek

Düşünüyordum ki, bu, her öğe için bir yaş (istek sayısı) depolayan özel bir sözlük nesnesi oluşturarak gerçekleştirilebilir. Application_BeginRequest ve Application_EndRequest yöntemlerine abone olarak, nesnelerin gerekli temizleme işlemini gerçekleştirebilirsiniz. Bu, muhtemelen sadece bir değil, X istekleri için bir veri parçasını saklayan bir nesneyi oluşturmayı kolaylaştırabilir. Bu doğru yolda mı? Burada çok benzer bir şey bulabilirsiniz

+0

Tanımladığınız yaklaşım tam olarak nasıl uygulayacağımdır. – JoshJordan

+0

Benim yaklaşımımla ilgili bir sorun var: Session nesnesi her iki yöntemde de boş. Temizlik kodunu yapıştırabilecek bir şey olan var mı? –

+0

Acılarını hissediyorum. –

cevap

1

Sana Global.ascx.cs ait Application_AcquireRequestState yönteminde tarif ne çok benzer bir şey uygulanmaktadır. Tüm oturum nesneler, okumaların sayısını tutan bir sınıfa sarılır.

// clear any session vars that haven't been read in x requests 
List<string> keysToRemove = new List<string>(); 
for (int i = 0; HttpContext.Current.Session != null && i < HttpContext.Current.Session.Count; i++) 
{ 
    var sessionObject = HttpContext.Current.Session[i] as SessionHelper.SessionObject2; 
    string countKey = "ReadsFor_" + HttpContext.Current.Session.Keys[i]; 
    if (sessionObject != null/* && sessionObject.IsFlashSession*/) 
    { 
     if (HttpContext.Current.Session[countKey] != null) 
     { 
      if ((int)HttpContext.Current.Session[countKey] == sessionObject.Reads) 
      { 
       keysToRemove.Add(HttpContext.Current.Session.Keys[i]); 
       continue; 
      } 
     } 
     HttpContext.Current.Session[countKey] = sessionObject.Reads; 
    } 
    else if (HttpContext.Current.Session[countKey] != null) 
    { 
     HttpContext.Current.Session.Remove(countKey); 
    } 
} 

foreach (var sessionKey in keysToRemove) 
{ 
    string countKey = "ReadsFor_" + sessionKey; 
    HttpContext.Current.Session.Remove(sessionKey); 
    HttpContext.Current.Session.Remove(countKey); 
} 
+1

'SessionHelper.SessionObject2' nasıl görünüyor? Eksik kod için – mattalxndr

+1

-1 - SessionObject2 nedir? – EdenMachine

İlgili konular