Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • YardımLaravel
  • Oturum Süresi Dolmuş Bir Kullanıcı Çıkış Yaptığın da Bunu Nasıl Yakalayabiliriz?

Herkese Merhaba, İyi Forumlar dilerim, Ufak Bir Sorum Olacaktı Siz değerli forum üyelerine.
Oturum süresi dolan bir kullanıcıyı sistem otomatik olarak çıkış yaptırıyor. Ben bu kullanıcıyı nasıl yakalayabilirim kontrolü nereden yapmam gerekiyor nasıl kontrol etmem gerekiyor.

Oturumdan çıkış yapmak için Tarayıcı çerezleri silinmiş olabilir sekmeler kapatıldıktan sonra uzun süre giriş yapmamış olabilir. Bu gibi durumlar da ben bunu yakalamak istiyorum tam olarak sorum bu açıkcası.

  • yusufc bunu yanıtladı.
  • koti42 Kullanıcının gerçek anlamda oturumunun sonlandığını bilemezsiniz. Dedikleriniz olduğunda bir kullanıcı kalmıyor ortada. Laravel çıkış yaptırmıyor, kullanıcı bir linke tıkladığında ya da arka tarafta auth middleware'i kullanan bir rotaya istek attığında unauthorized hatası aldığı için otomatik olarak login sayfasına redirect yapıyor, logout yapmıyor. Session ile de kesin çözüm elde edemezsiniz çünkü dediğiniz gibi kullanıcı çerezleri de silebilir. Her kullanıcı için bir cache tutup cron ile ilgili de bir şey yapabilirsiniz belki ama cron da minimum 1 dk arayla çalışır.

    koti42 Uzun süre giriş yapmayınca kullanıcı kodlarim hiç giriş yapmamış gibi davranıyor kullanıcıya istemediğim bir uyarı mesajını gösteriyor ekran da.

    Sanırım buralar javascript kullandığınız yerler. Buralarda önce ekstra bir kullanıcı kontrolü yaptırılabilir.

    Onun dışında socket...

    bildiğim kadarıyla php ile bunu yakalamanın yöntemi yok. socket.io araştırın kullanıcı giriş ve çıkışı yakalayabiliyorsunuz
    çıkış yaptığında bir endpointe istek atarak işlerinizi yapabilirsiniz tabi kullanici id ile 🙂

      dinar Teşekkür ederim ben araştırayım bir onu

        Authentication eventlerini kullanarak bu işi laravel tarafında yapmak mümkün. Uzun süre giriş yapmamış kişiyi zaten oturum süresi dolduğunda logout'a zorlarken uyguladığın yöntemin bir benzerini yapıp cron'da belirli aralıklarla çalıştırabilirsin. Bunu yaparken giriş tarihlerine göre hesap yapıp belirli bir sürenin üzerinde (bu noktada bir referans daha olmalı, son aktivite tarihi gibi) oturumu açık olan kullanıcının oturumunu kapatabilirsin.

        Cookie tarafına girilecekse bunu client tarafında anca ekenti vs yapabilirsin ama efektif bir çözüm sayılmaz. Alt + F4 veya herhangi bir crash yüzünden clienttan istediğin bilgiyi alamazsın. Socket ile anlık geri bildirim almak mümkün ama çok uzun süre sonraki oturum örneğin için pek iyi bir seçenek sayılmaz. Referans olarak cron için kullanılabilir bence.

        mgsmus Uzun süre giriş yapmayınca kullanıcı kodlarim hiç giriş yapmamış gibi davranıyor kullanıcıya istemediğim bir uyarı mesajını gösteriyor ekran da. Bu yüzden acaba başka bir şekil de bunu ayırt edebilir miyim diye merak ettim doğrusu

          koti42
          Şöyle bir şey var.
          İşinize yarayabilir belki.

          if ((time() - Session::activity()) > (Config::get('session.lifetime') * 60))
          {
             // Session expired
          }

          İşe yarıyorsa söyleyin; biz de kullanalım 🙂

            yusufc Denedikten sonra unutmazsam geri dönüş ekleyeceğim .d teşekkür ederim

            Edit. Tanımsız Metod hatası veriyor
            [2021-09-12 22:46:33] production.ERROR: Call to undefined method Illuminate\Session\Store::activity() {"exception":"[object] (Error(code: 0): Call to undefined method Illuminate\Session\Store::activity() at C:\xampp\htdocs\technologyblog\vendor\laravel\framework\src\Illuminate\Support\Manager.php:191)

            yusufc Aklıma şöyle bir şey geldi ne kadar mantıklı bilmiyorum ama sizinle de paylaşayım her kullanıcıya girişin de veri tabanına bir Session süresi tanımlasak örnek veriyorum kullanıcı beni hatırlayı seçtikten sonra maksimum aktiflik durumu 4 Saat olarak belirleyip o süre dolduktan sonra otomatik çıkış yaptırsak ve o sürenin kontrolünü yapsak şuanki saatten büyük veya eşit mi diye şuanki saatten küçük kalması durumun da oturumun sonlandığını yakalayabiliriz diye düşünüyorum. ama tarayıcı sıfırlanırsa nasıl yapılır bilemedim 😃 otomatik tekrar giriş yaptırılabilir belki oturum süresi dolana kadar da ne kadar mantıklı bilemedim tabi 😃

              activitykaldırılmış sanırım.
              Onun yerine last_activitydenenebilir belki.

              koti42
              Laravel bu dediğinizi zannediyorum yapabiliyor. (https://laravel.com/docs/8.x/session#configuration)
              Session bilgisini database'e kayıt ettirmek lazım.
              Ondan sonra da last_activity ile yukarıda yazdığım şekilde yapmak lazım.
              Sonuç olarak neredeyse sizin dediğinize denk geliyor aslında.

              Yeni Laravel'ciyim, o nedenle müessesemiz kaybolan/bozulan kodlardan mesul değildir.

                koti42 Kullanıcının gerçek anlamda oturumunun sonlandığını bilemezsiniz. Dedikleriniz olduğunda bir kullanıcı kalmıyor ortada. Laravel çıkış yaptırmıyor, kullanıcı bir linke tıkladığında ya da arka tarafta auth middleware'i kullanan bir rotaya istek attığında unauthorized hatası aldığı için otomatik olarak login sayfasına redirect yapıyor, logout yapmıyor. Session ile de kesin çözüm elde edemezsiniz çünkü dediğiniz gibi kullanıcı çerezleri de silebilir. Her kullanıcı için bir cache tutup cron ile ilgili de bir şey yapabilirsiniz belki ama cron da minimum 1 dk arayla çalışır.

                koti42 Uzun süre giriş yapmayınca kullanıcı kodlarim hiç giriş yapmamış gibi davranıyor kullanıcıya istemediğim bir uyarı mesajını gösteriyor ekran da.

                Sanırım buralar javascript kullandığınız yerler. Buralarda önce ekstra bir kullanıcı kontrolü yaptırılabilir.

                Onun dışında socket...