Session Tracking in Servlet

Merhaba arkadaşlar, bu yazımda session konusuna değinmeye çalışacağım.

Session kelime anlamı olarak aralık anlamına gelmektedir. Servlet içerisinde iyi bir session yönetimi bulunmaktadır. Kısaca; request’leri ilişkilendirmek.

HTTP, stateless(durumsuz) bir yapıya sahiptir. Gelen her request/istek yeni bir istek gibi karşılanır. Web sayfasına gelen her istek farklı algılanır. Client/Server arasında farklı connection açılmasına neden olur.

Session mekanizaması sayesinde daha önce gelmiş request’leri birbiri ile ilişkilendirebiliriz. Bu sayede stateful web applicationlar yapabiliriz. Web uygulamalarında bir kullanıcı birden fazla kaynağa ulaşmak isteyebilir. Aynı request’in farklı request olarak algılanmaması için session’lar kullanılmaktadır.

Session bilgisi client’in makinesinde depolanır. Session mekanizması için farklı alternatifler de vardır. Enterprise javabean , db , HttpSession vs.

 

2015-02-01 13:57:55

* Aynı client’dan request gelmesine rağmen ikinci request yeni gibi algılanmaktadır.

Sessionlar 3 şekilde tutulabilir;

  1. Cookies
  2. Html hidden form fields
  3. URL Rewriting
  4. HttpSession

Session ID

Contaıner tarafından oluşturulan unique bir id’dir. Request geldiğinde contaıner bir unique session id oluşturur ve bunu response’a ekler. Bir sonraki request geldiğinde contaıner, id’ye bakar ve session eşlemesi yapar. Eğer daha önce aynı request geldi ise session ile request’i ilişkilendirir.

2015-02-01 14:05:20 2015-02-01 14:05:31

* Yukarıda görüldüğü gibi ikinci request geldiğinde Contaıner request/session ilişkilendirmesi yapar.

* Session , cookie üzerinden taşınır. Aşağıdaki maddeler , Contaıner’ın sorumluluğundadır;

  • HttpSession objesinin oluşturulması.
  • Unique Session id oluşturulması.
  • Cookie oluşturulması.
  • Cookie ve Session id’nin ilişkilendirilmesi.
  • Session id’yi response’a eklenmesi.
  • Gelen request’lerin yeni/eski diye ayrıştırılıp request/session eşleştirilmesinin yapılması.

* Contaıner, gelen request’e bakarak session id oluşturulmasına karar verir. Cookie içerisinde session id bulunur ise session ile eşleştirme yapılır. Bulunmazsa yeni bir unique session id oluşturup cevaba eklenir.

 

Cookies in Servlet

Mutliple request için request bilgilerinin persist edilmesini sağlar. Kısaca request bilgisini üzerinde taşır.

Cookie, browser cache belleğinde saklanır. Cookie, name ve value ile kullanılır. Cookie nasıl çalışır ona bakalım;

Default olarak her request yeni bir request’tir.  İlk gelen request için cookie bilgisi oluşturulur ve cevaba(response) eklenir. Default olarak aynı client’dan gelen ikinci istekte cookie bilgisi request’e eklenir. Ve server’a request+cookie ile erişilir. Bu sayede request bilgileri saklanır.

2015-02-01 14:18:55

Cookie Type : İki tip Cookie vardır; Non-persistent Cookie ve Persistent Cookie.

  • Non-persistent Cookie : Single session olarak da bilinir. Browser kapandığında silinir.
  • Persitent Cookie : Multiple session olarak bilinir. Browser kapandığında silinmez. Ancak kullanıcı logout/signout oluduğunda silinir.

Cookie kullanmanın avantajı ; Requst durumunu sürdürebilir etmek basittir/kolaydır. Cookie client side tarafında saklanır.

Cookie kullanmanın dezavantajı ; Browser’da cookie özelliği disable olursa bu teknik çalışmayacaktır. Yanlız text bilgi cookie objesi üzerine set edilebilir.

* Gmail, cookie tekniğini kullanmaktadır. Browser’da cookie özelliği disable olursa gmail çalışmayacaktır.

Browser’da oluşturulan Session id’yi görebiliriz;

2015-02-01 14:38:09

Cookie Class

* javax.servlet.http paketi altında bulunur Cookie classı. İki yapılandırıcısı vardır;

Örnek uygulama;

2 Servlet classı ve index.jsp;

index.jsp

* /cookie url ile map edilmiş servlet classına bakalım;

CookiesServlet.class;

* CookiesServlet classımızda bir Cookie nesnesi oluşturup response’a ekledik. Yeni bir sayfaya da yönlendirmede bulunduk. /display ile map edilmiş servlet’de ise bu cookie nesnesini kullanacağız.

DisplayServlet.class;

* Çıktımıza bakalım;

2015-02-01 22:47:31

 

 

 

 

 

 

Örnek uygulama;

* Bir sessiondan kaç defa request geldiğini session üzerinde attribute kullanarak tutabiliriz;

* Sayfayı 11 defa refresh ettim

2015-02-01 22:57:54

 

 

 

 

 

Örnek uygulama;

Session objesi üzerinde isNew() methodunu kullanarak session’nun ilk defa olup olmadığını bulalım;

* İlk olarak çalıştırdığımızda ki çıktı;

2015-02-01 23:04:58

 

 

 

 

 

* Sayfayı refresh edip baktığımızda session oluşturulmuş olucaktır;

2015-02-01 23:05:09

Html hidden form fields

User verilerini muhafaza etmenin bir diğer yolu da html hidden form fields kullanmaktır.

* Form’un submit olması gerekmektedir!. Bu bir dezavantajdır. Diğer bir dezavantaj ise server side olmasıdır.

* Avantajı ise cookie’nin browser tarafından açık yada kapalı olmaksızın her durumda çalışmasıdır.

HiddenFormFields.jsp

* /hiddenfields ile map edilen Servlet class’ımız;

HiddenFormFields Servletimizde html hidden form fields kullandık. Hidden form fields invisible’dir. /displayHiddenForm ile map edilmiş servlet’te hidden form fields’ı kullamalım;

Çıktı;

2015-02-01 23:27:41 2015-02-01 23:28:59 2015-02-01 23:29:54

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bu yazımı burada sonlandırmak istiyorum arkadaşlar.

Yazıda Session, cookie ve html hidden form fields ve birkaç noktaya değinmeye çalıştım. Bir sonraki yazıda HttpSession sınıfının methodları değinmeye çalışacağım. Cookie’leri nasıl sileriz, timeout nasıl ayarlarız vs. gibi konulara ve URL Rewriting konusuna değiniceğim.

Bir sonraki yazıda görüşmek üzere.

Mutlu kalın, kod’la kalın ve bol bol Çay için

Kaynak kodlar : CookiesServlet

~ Alican Akkus

 

1722 Total Views 2 Views Today

  • Sesumy

    Emeğinize sağlık.Güzel bir derleme

    Fakat Türkçe içerikli bir derlemenin başlığı neden ingilizce olur onu çözemedim.Kolay Gelsin

    • Alican Akkus

      Merhabalar, teşekkür ederim.
      Sürekli ingilizce kaynaklarla ilgilendiğimiz için ister istemez teknik terimleri ingilizce kullanabiliyoruz. Ayrıca herhangi bir sorunla karşılaştığınızda ingilizce olarak arama yaparsanız çok daha fazla ve doğru cevaplara erişebilir, sorununuzu daha çabuk çözebilirsiniz.
      Kolay gelsin, iyi çalışmalar.