Java Web Uygulamalarında Oturum Yönetimi
HTTP durumsuzdur (stateless). Bu, tarayıcıdan gelen her isteğin tamamen yeni bir etkileşim olduğu anlamına gelir. Sunucu kim olduğunuzu veya bir saniye önce ne yaptığınızı hatırlamaz.
Oturum yönetimi olmasaydı, web siteleri işlevini yitirirdi.
- Her sayfa tıklamasında tekrar giriş yapmak zorunda kalırdınız.
- Alışveriş sepetleri her işlemden sonra boşalırdı.
- Kişisel ayarlar anında kaybolurdu.
Oturum yönetimi süreklilik sağlar. Sunucunun birden fazla isteği tek bir kullanıcıyla ilişkilendirmesine olanak tanır.
Nasıl çalışır:
- Kullanıcı giriş yapar.
- Sunucu bir oturum oluşturur.
- Sunucu benzersiz bir Session ID oluşturur.
- Sunucu bu ID'yi tarayıcıya gönderir.
- Tarayıcı, her yeni istekte ID'yi geri gönderir.
Java, bunu yönetmek için HttpSession arayüzünü kullanır. Kullanıcı kimlikleri veya rolleri gibi verileri doğrudan oturumda saklayabilirsiniz.
Yaygın takip yöntemleri:
- Cookies (Çerezler): En yaygın yöntemdir. Sunucu bir
JSESSIONIDçerezi gönderir. Geri kalanını tarayıcı halleder. - URL Rewriting (URL Yeniden Yazma): ID, web adresine eklenir. Bu, kullanıcılar çerezleri devre dışı bırakırsa çalışır.
- Hidden Form Fields (Gizli Form Alanları): ID, HTML formlarının içinde kalır.
Güvenlik en büyük zorluktur. Eğer bir saldırgan bir Session ID çalarsa, bir kullanıcının kimliğine bürünebilir.
Güvende kalmak için bu kuralları izleyin:
- JavaScript hırsızlığını önlemek için
HttpOnlyçerezleri kullanın. - Verilerin yalnızca HTTPS üzerinden taşınması için
Secureçerezleri kullanın. - CSRF saldırılarını önlemek için
SameSiteayarlarını kullanın. - Bir kullanıcı çıkış yaptığında her zaman
session.invalidate()metodunu çağırın. - Fixation saldırılarını önlemek için giriş yaptıktan sonra yeni bir oturum oluşturun.
Büyük şirketler için ölçeklendirme: Standart oturumlar tek bir sunucuda çalışır. Ancak büyük uygulamalar, bir yük dengeleyici (load balancer) arkasında birçok sunucu kullanır. Eğer oturumunuz Sunucu A'daysa, Sunucu B sizi tanımaz.
Bunu düzeltmek için profesyoneller şunları kullanır:
- Sticky Sessions (Yapışkan Oturumlar): Yük dengeleyici sizi her seferinde aynı sunucuya yönlendirir.
- Distributed Caching (Dağıtık Önbelleğe Alma): Tüm sunucular Redis gibi merkezi bir depoya bağlanır. Bu, endüstri standardıdır.
Modern uygulamalar ayrıca JWT'ler (JSON Web Tokens) kullanır. Oturumların aksine, JWT'ler durumsuzdur (stateless). Veri sunucuda değil, token'ın kendisinde bulunur. Bu, mikro hizmetleri (microservices) ölçeklendirmeyi kolaylaştırır.
Oturum yönetiminde uzmanlaşmak, güvenli ve profesyonel Java uygulamaları geliştirmenize yardımcı olur.
Kaynak: https://dev.to/naveenkumar1/session-management-in-java-web-applications-38od
İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi