Etiket arşivi: php beni hatırla

PHP – Oturumu Açık Tut (Beni Hatırla)

Başlığa beni hatırla şeklinde bir ibare ekledim fakat yapacağımız şey aslında beni hatırla dağil, oturumu açık tut sistemi olacak. Peki bu iki terim arasında fark ne?

  • Beni hatırla: Tarayıcı kapatılıp tekrar açıldığında cookie ile kullanıcı adının input değerine yazdırılması.
  • Oturumu açık tut: Tarayıcı kapatıldığında tutulan oturum sessionları silinse bile hesabın sonradan girildiğinde açık olarak karşımıza çıkması.

Beni hatırla checkbox’u neredeyse login sayfası olan tüm tasarımlarda mevcut fakat eminim ki bu özelliği ya kodlamadan geçiyorsunuz ya da HTML’den checkbox’ tamamen siliyorsunuz.

Ayrıca bu yazıda sizlere bu sistemi nasıl yapacağınızı anlatacağım ve örnek kodları paylaşacağım. Direkt olarak şu kodu yapıştırın ve özellik çalışsın gibi bir şey beklemeyin.

Adım 1: Mantığı Kavrayalım

Bildiğiniz gibi veri saklayabilmemiz için 2 yöntem var: Session ve Cookie.

Oturum işlemlerimizi yaparken session’ları terciih ediyoruz (zaten Türkçesi de oturum) çünkü cookie tarayıcı üzerinden kolayca değiştirilebilir ve güvenlik sorunlarına neden olabilir. Fakat bir de şöyle bir olay var tarayıcıyı kapattığınızda sessionlar silinir fakat cookieler istediğiniz kadar açıp kapatın çerezleri temizlemediğiniz taktirde sürekli kalacaktır. Ancak sakın çerezler silinmiyor diye oturum bilgilerinizi cookie üzerinde tutmayın 5 dakikanın altında bir sürede siteniz hacklenir ve bunu herkes yapabilir.

Sistemimizin işleyişi şu şekilde olacak; yine cookieler üzerinde çalışacağız fakat hem herhangi bir şifreyi tutmayacağız hem de şifreleme yaptıktan sonra güvenli bir şekilde yazılımımızı çalıştıracağız.

  1. Veritabanında kullanıcıların tutulduğu tabloya hash adında bir sutün oluşturuyoruz.
  2. IP adresi, kullancı adı, site adresi ve belirleyeceğimiz bir sabit ile kullancılar giriş yaparken hash adreslerini oluşturup veritabanında hash sütününü güncelliyoruz, ekstra olarak oluşturduğumuz hash değeri için bir cookie oluşturuyoruz. İsmini siteadi_hash şeklinde yapabilirsiniz.
  3. Giriş kontrol fonksiyonumuzda session kontrolünden sonra cookie üzerinde kayıtlı olan hash ile veritabanında kayıtlı olan hashlerin karşılaştırmasını yapıyoruz. Eğer uyuşan bir kayıt var ise başka birinin hash bilgisi ile giriş yapılmaması için tekrar oluşturduğumuz fonksiyon ile eşleşen kaydın kullanıcı adını kullanarak hash değerini oluşturuyoruz. Eğer bu 2 değer de birbirine eşit ise artık gönül rahatlığı ile oturum bilgilerini oluşturabilirsiniz.

Adım 2: Örnek Kodlar

Öncelikle veritabanımıza hash adında bir sutün açalım. PhpMyAdmin ile kolaylıkla yapabilirsiniz ya da bağlantıyı kurduktan sonra SQL kodunu çalıştırabilirsiniz.

Kendinize göre düzenlemeden kodu çalıştırırsanız hata alırsınız. SQL kodundaki uyeler kısmı tablo ismi, id ise hangi sütündan sonra ekleneceğidir.

Hash oluşturma fonksiyonumuz id parametresi alıyor ve gelen id ile sabitleri ve ip adresini kullanarak şifrelenmiş bir kod üretiyor. Giriş yaptıktan sonra bu fonksiyon ile kullanıcıya özel hash kodunu oluşturup, UPDATE sorgusu ile veritabanında güncellemeniz gerekiyor.

Bu veritabanı işlemlerinin kod örnekleri ve kullanımı için PDO Kullanımı yazıma göz atabilirsiniz.

Hash değerini ve kullanıcı id’sini alan cookie oluşturma fonksiyonumuz yukarıda. Bu fonksiyonu giriş yaptıktan sonra hash oluşturup hemen arkasından bunu çalıştırıyoruz ve hash değerimizi mevcut tarayıcıya kaydediyoruz.

Son kısım olan giriş kontrolündeki işlem için herkeste farklılık göstereceği için bir kod paylaşmıyorum sadece liste olarak algoritmasını yazıyorum, siz basit bir şekilde bunu kendinize gör entegre edebilirsiniz.

  1. Session kontrolünden sonra oluşturulan cookie değerinin varlığını kontrol et.
  2. Eğer cookie mevcut ise SELECT sorgusu ile aynı hash değerine sahip bir kaydın olup olmadığını kontrol et.
  3. Eğer kayıt eşleşir ise eşleşen kaydın id’si ile hash oluştur ve cookie üzerinde hash ile karşılaştır.
  4. Oluşturulan ve cookie üzerindeki hash değerleri aynı ise SESSION oluştururarak giriş işlemini otomatik olarak yaptırabilirsiniz.

Son olarak yukarıda belirtmeyi unuttum kaş yapalım derken göz çıkartmayalım. Bu işlemleri yaptığınızda tüm kullanıcıların oturumu sürekli açık kalacaktır. Bunun için giriş yapılırken eğer beni hatırlı kutusu işaretli ise cookie oluşturma işlemi yapılacak eğer kutu işaretli değil ise cookie sıfırlanacak. Sıfırlamamızın nedeni aynı kullanıcı beni hatırla seçeniğini seçerek giriş yapmış ve sonrasında tekrar giriş yaparken işareti kaldırmış olabilir ve bu durumda sessionın geçerliğini korumaması için silinmesi gerekiyor.

Anlattığım konu aslında çok basit ama hem aklınızda soru işareti kalmaması için hem de herkesin eksiksiz anlayabilmesi için birraz uzun tuttum. Umarım faydalı olmuştur.