środa, 21 marca 2012

Użytkownicy online

Jednym z ostatnich moich zadań, było przygotowanie statusów użytkowników, które będą określały czy dany użytkownik jest online, czy też nie.

Projekt, w którym to realizuje korzysta z cachowania przy pomocy Redis'a, o którym pisałam we wcześniejszym poście. Funkcje są funkcjami wcześniej omawianymi z klasy RedisCache.

Z uwagi na to, że sesja również przechowywana jest w Redisie, korzystam w moim projekcie .NET z własnego provider'a sesji. Na początku myślałam, że będę mogła dodawać identyfikatory użytkowników do listy w cache'u przy logowaniu lub w zdarzeniu Session_Start w Global.asax i usuwać przy wylogowaniu bądź przy wywołaniu zdarzenia Session_End. Niestety, przy korzystaniu z własnego provider'a sesji zdarzenie Session_End nie będzie nigdy wywoływane.
Tak więc zrobiłam to inaczej, każdy użytkownik będzie przechowywany w redisie jako osobny klucz z wartością "1" jeśli jest dostępny. Klucz ten będzie dodawany bądź aktualizowany przy logowaniu i w każdym kontrolerze widoków projektu. Natomiast czas wygaśnięcia klucza zostanie ustawiony na 10 minut.


public static void DodajUzytkownikaOnline(string id)
        {
                string klucz = String.Format("online-{0}", id);
                RedisCacheProvider.RedisCache.Set<string>(klucz, "1", DateTime.Now.AddMinutes(10));
        }

        public static void UsunUzytkownikaOnline(string id)
        {
                 string klucz = String.Format("online-{0}", id);
                 RedisCacheProvider.RedisCache.Remove(klucz);
        }



public static bool CzyOnline(string id)
        {
                string klucz = String.Format("online-{0}", id);
                string status = RedisCacheProvider.RedisCache.Get<string>(klucz);
                if (status == "1")
                    return true;
                else
                    return false;
        }


Brak komentarzy:

Prześlij komentarz