31 Ağustos 2020 Pazartesi

Session

Belli bir zaman aralığındaki durumdur. Bu durumu takip etmek ve yönetmek session tracking, session management.

Http stateless bir protokoldür, yollanan her istek farklı bir kullanıcı gibi yollanır. 2 defa istek yollayan bir kişinin aynı kişi olup olmadığı session tracking ile takip edilir. Cookie, url vs ile takip sağlanabilir.

Cookie

  • Persistent, non-persistent olabilir. non-persistent tarayıcı kapanınca silinir.
  • Tarayıcı ayarlarınca cookie disabled olursa cookie ile session tracking yapılamaz (gmail, facebook gibi siteler de cookie'siz çalışmıyor).
  • Cookie'ler sadece text formatında olur.
  • name, value, comment, path, version, max-age vs bilgiler tutulur.
  • javax.servlet.http.Cookie ile cookie işlemleri yapılabilir.
  • Cookie eklemek için: HttpServletResponse.addCookie(new Cookie())
  • Cookie okumak için: HttpServletResponse.getCookies()
  • Cookie silmek için cookie.setMaxAge(0), HttpServletResponse.addCookie(cookie)
  • Kullanım Alanları:
    • Yetkilendirme sistemi
    • Kullanıcı takibi
    • Tema vs özelleştirmeler

URL Rewriting

  • qwerty.com/page?id=123 şeklinde url olarak parametre yollanabilir. google.com/search?q=google şeklinde arama yaparken arama kelimesini parametre olarak url ile gönderebiliyoruz.
  • HttpServletRequest tipindeki nesne getParameter(String) metodu içerir. Bu metod ile okuma yapılır.

HttpSession

  • Cookie'ler kullanıcı tarafında görüntülenebilir, bu yüzden önemli bilgileri server tarafında tutup cookie ile bu bilgilerin id'si yollanır. Bu iş HttpSession tarafından halledilir.
  • HttpSession oluşturulduğu zaman bir session nesnesi oluşur, bu session nesnesinin içine bilgi eklemek istersek session.setAttribute("deneme", "bu bir bilgidir"), okumak istersek session.getAttribute("deneme") şeklinde okuma ve yazma yapabiliriz.
  • HttpSession'u kullanabilmek için HttpServletRequest tipindeki request nesnesinin getSession() fonksiyonu kullanılır.
doGet(HttpServletRequest request, ...){...  HttpSession session = request.getSession()  ...} 
  • request.getSession() eğer session varsa session döndürür, session oluşturulmamışsa yeni session oluşturur ve o session'u döndürür.
  • Sadece session oluşturulup oluşturulmadığını öğrenmek için request.getSession(false) kullanılır.
  • Oluşturulan session'u silmek içinse session.invalidate() metodu kullanılır (ör. çıkış yapmak).
  • Session oluşturulduğu zaman bir id değeri belirlenir ve bu id değeri cookie ile tarayıcıya yollanır.
  • Yollanan cookie non-persistent'tir yani tarayıcının kapatılması, cookilerin temizlenmesi vs durumlarında silinir. Eğer kullanıcı bilgilerinin tutulması vs. bu yolla yapılıyorsa kullanıcı tarayıcıyı her kapatıp açmasında yeniden giriş yapması gerekecektir.
  • Session ile ilgili daha fazla bilgi ve session'ı persistent yapmaya yönelik şu link var: Stackoverflow. Çözümü özetlemek gerekirse:
    • Bir context listener oluşturulur. Bu listener sayesinde web uygulaması açıldığında, kullanıcı session bilgilerini tutacak olan bir hashmap oluşturulur.
    • Sonrasında bir HttpSessionListener oluşturulur. Bu listener ile her bir session oluşturulduğunda session bilgisini aktif kullanıcılar listesine ekleriz.
    • Kullanıcı girişini tutmak için ayrıca bir kalıcı cookie tutmak gerekiyor.
    • Bu kalıcı cookie varsa kullanıcı bilgilerine bakarız, bu bilgiler aktif kullanıcıların içinde tutulur (context içinde), sonrasında duruma göre yeniden giriş yapmaya veya profil sayfasına yönlendirilir.
    • Eğer kalıcı cookie yoksa yeni bir cookie oluşturup cookie değeri olarak session id verilir ( request.sessionId() )
  • Yukarıdaki stackoverflow linkinden yönlendirilen sayfada java 8 sonrasında gelen HttpAuthenticationMechanism ve @RememberMe annotation'ı ile nasıl çözüleceği anlatılıyor: Stackoverflow 2

0 yorum:

Yorum Gönderme