Çözüldü ASP.NET MVC ile session kontrolü

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

khalannz7

Centipat
Katılım
18 Ağustos 2022
Mesajlar
526
Çözümler
7
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Merhaba, sessiontimeout özelliğini 15 dakika olarak ayarladım, 15 dakika geçtikten sonra yönlendirme yapmak istiyorum. Bunun için session_end'in içinde yönlendirmemi yaptım ama istemci tarafında yönlendirmeyi yapmıyor. Bende bir JavaScript fonksiyonu yazıp her 1 dakikada sessionu kontrol eden bir Controllere istek atıp, yönlendirme yapmayı düşündüm. Sizce bu yöntem mantıklı mı? Alternatif olarak ne önerirsiniz?
 
Çözüm
Benimle aynı soruna düşen arkadaşlar için alternatif bir çözüm sunuyorum. Auth filterimda Ajax isteği kontrolü yapıp eğer session null ise ve bu işlem Ajax isteği ise JSON döndürdüm. Dönen JSON'u Ajax'ta yakalayıp logine yönlendirdim. İşe yaradı.
Kod:
if (HttpContext.Current.Session["UsersDetails"] == null)
            {
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.Result = new JsonResult
                    {
                        Data = new { result = false, timeoutUrl = "/Login/Login" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet
                    };
                }
JavaScript:
let _timeLeft = 20000;

function timeTick(){
     if(_timeLeft <= 0){
        window.location.href = 'Login';
     }
     _timeLeft = _timeLeft - 1000;
}

function resetTimer(){
     _timeLeft = 20000;
}

setInterval(timeTick, 1000);
resetTimer fonksiyonunu AJAX requestlerinden sonra cagiracaksiniz.
 
JavaScript:
let _timeLeft = 20000;

function timeTick(){
 if(_timeLeft <= 0){
 window.location.href = 'Login';
 }
 _timeLeft = _timeLeft - 1000;
}

function resetTimer(){
 _timeLeft = 20000;
}

setInterval(timeTick, 1000);
Resettimer fonksiyonunu Ajax requestlerinden sonra cagiracaksiniz.

Mantığı tam olarak algılayamadım hocam. Şöyle mi taracıyı üzerinde 20 dakikalık bir sayaç hazırlıyoruz, bir if koşulu içine eğer Ajax isteği varsa sayacı sıfırla yoksa devam et gibisinden mi?
 
AJAX isteği yaptığın fonksiyondan sonra hemen resetTimer(); diyerek timer'ı sıfırlayabilirsin. Doğrudan timer kodunun içine müdahale etmene gerek yok.
 
AJAX isteği yaptığın fonksiyondan sonra hemen resetTimer(); diyerek timer'ı sıfırlayabilirsin. Doğrudan timer kodunun içine müdahale etmene gerek yok.
Anladım hocam ama sizce mantıklı bir yaklaşım mı çünkü bir sürü ajax isteği var biraz daha manuel yerine otomatik bir yaklaşım yok mudur? Böyle yapacağım gibi gözüküyor şu an zaten ama öğrenmek açısından soruyorum.
 
Benimle aynı soruna düşen arkadaşlar için alternatif bir çözüm sunuyorum. Auth filterimda Ajax isteği kontrolü yapıp eğer session null ise ve bu işlem Ajax isteği ise JSON döndürdüm. Dönen JSON'u Ajax'ta yakalayıp logine yönlendirdim. İşe yaradı.
Kod:
if (HttpContext.Current.Session["UsersDetails"] == null)
            {
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.Result = new JsonResult
                    {
                        Data = new { result = false, timeoutUrl = "/Login/Login" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet
                    };
                }
 
Son düzenleme:
Çözüm

Yeni konular

Geri
Yukarı