Bilal Koçoğlu/ Kasım 26, 2018/ Servlet

HttpSession in Servlet

HttpSession in Servlet hakkında , session tracking‘in son yöntemi olan HTTP Session’u birlikte inceleyip bir örnekle konuyu pekiştireceğiz. Sizlere tavsiyem bu önemli tekniği burada yaptığımız örnek dışında da kendinize özgü örnekler yapmanızdır.

Öncelikle HttpSession’un bir interface olduğunu belirtmek isterim. Bu interface kullanarak controller gelen her yeni request için bir session ve bununla birlikte benzersiz bir session id oluşturur. Oluşturulan session ve session içindeki bilgiler oturum takibi yani kullanıcıyı tanımak için kullanılır. HttpSession arabirimi sayesinde her bir session için birçok özellik tanımlayabiliriz. Bu özellikleri birlikte incelemeden önce bir görsel ile buraya kadar bahsettiğimiz kısmı modelleyelim.

HttpSession in Servlet

HttpSession in Servlet

HttpSession in Servlet

HttpSession nesnesi HttpServletRequest kullanarak elde etmek için iki method vardır;

  • public HttpSession getSession() ⇒ Bu request ile ilişkili(daha önceden session’ı oluşturulmuş) session’u döndürür veya request bir session’a sahip değilse yani daha önceden bu request ile ilişkilendirilmiş bir session nesnesi yoksa yeni bir session oluşturulur.
  • public HttpSession getSession(boolean create) ⇒ Bu request ile ilişkili geçerli session’ı döndürür veya bu request ile ilişkili bir session yoksa ve create parametresi true ise session oluşturulur ve döndürülür, bu parametre false ise null döner.

Bunların yanında çoğunlukla kullanılan HttpSession arabirimi methodlarına göz atalım;

  • public String getId() ⇒ Session’a ait id değerini içeren String’i döndürür.
  • public long getCreationTime() ⇒ 1 Ocak 1970 GMT gece yarısından bu yana milisaniye
    cinsinden ölçülen bu oturumun oluşturulduğu saati döndürür.
  • public long getLastAccessedTime() ⇒ Kullanıcının, bu session ile ilgili bir istek gönderdiği son zamanı, 1 Ocak 1970 GMT gece yarısından bu yana milisaniye olarak GMT olarak döndürür.
  • public void invalidate() ⇒ Session nesnesini geçersiz kılar.

Şimdi ise bir örnek ile bu methodları kullanalım ve değinilmesi gereken diğer konulara değinelim. Kısaca örneğimizin senaryosunu anlatmak gerekirse; kullanıcıdan bir kullanıcı adı ve şifre girmesini isteyeceğiz ufak bir kontrol olması açısından şifre “123” ise girişi onaylayacağız. Daha sonra bir session nesnesi oluşturup bu kullanıcı adı ve şifre değerlerini session içerisine ekledik. Ana sayfada ise kullanıcıya bu bilgileri gösterdik. İsteyen arkadaşlar veritabanı bağlantısı kurup login kontrolünü oradaki bilgiler ile yapabilir. Biz servlet konusunun sonunda tüm bu bahsettiğimiz işlemleri daha kapsamlı bir örnek ile tekrar edeceğiz.

Dosya Yapısı
HttpSession in Servlet

HttpSession in Servlet Dosya Yapısı

HttpSession in Servlet

pom.xml

index.jsp

LoginController.java

HomeController.java

LoginController.java

Örneğimizde kod üzerinden farklı açıklamalar yapmak gerekirse, geçen derste de belirttiğimiz üzere servletlermizi artık web.xml sayfasında tanımlamak yerine daha kolay ve kullanışlı olan @WebServlet etiketini kullandık. Bu etiket ile ilgili daha detaylı açıklamayı geçen dersimizde yapmıştık. Buradan ulaşabilirsiniz.

HttpSession in Servlet

Kodda da fark ettiğiniz üzere oluşturduğumuz veya gelen requestten elde ettiğimiz session nesnesine setAttribute(String key, String value) methodu ile bazı değerler ekledik. Burada esas bahsetmek istediğim daha önceden bir key belirterek atadığımız değeri (örn: setAttribute(“username”, “deneme”) şeklinde) değiştirmek istediğimizde aynı key’i kullanarak tekrar üstüne yazabiliriz (örn: setAttribute(“username”, “admin”) şeklinde). Bu işlemlerden sonra aynı session nesnesinden username key’ine ait değeri aldığımızda en son ayarlanan value değerini alırız.

Bahsetmek istediğim son bir konu ise oluşturulan session nesnelerinin süresi ile ilgili. Giriş yapan kullanıcının belli bir süre geçtikten sonra veya bu session ile yapılan en son işlem zamanından belli bir süre geçtiğinde oturumun sona ermesini istediğimiz durumlar olabilir. Oturum sona erdirmenin planladığımız senaryoya göre değişen iki farklı yolu vardır. Bu senaryolardan birincisi, bir kontrol olmadan oluşturulan her session’ın belli bir süre sonra ortadan kaldırılmak istenmesidir. Bu senaryo için kullanılabilecek birinci yöntem web.xml sayfasında;

<session-config>
<session-timeout>60</session-timeout>
</session-config>

HttpSession in Servlet

bu şekilde bir konfigürasyon yapmaktır. Burada dakika cinsinden verdiğimiz parametreye göre, bu örnek için 60 dakika, bu süre sonunda oluşturulan session nesnesi koşulsuz şartsız ortadan kaldırılır. Yine aynı senaryo için kullanılabilecek, daha karmaşık ve tercih etmeyeceğim ama değinmekte fayda gördüğüm, ikinci yöntem ise getCreationTime() methodu ile session’ın oluşturulma zamanı, o andan çıkartılarak arada geçen süre hesaplanabilir ve istediğimiz değerden fazla ise invalidate() methodu ile session yok edilebilir.

getCreationTime() methodunu açıklarken de söylediğimiz gibi bu methoddan bize dönecek olan değer 1 Ocak 1970’ten session oluşturulma tarihine kadar geçen milisaniye değeridir. Peki bu değeri kullanarak tarih hesabını nasıl yapacağız ? Date classının bir constructor ı bu işlem için tam olarak biçilmiş kaftandır. GetCurrentTime() methodundan dönen değeri olduğunu gibi yazdırırsanız göreceğiniz değer “1543248529987” tarzında long bir ifadedir. Bunu tarihe çevirmek istediğimizde ;

HttpSession in Servlet

Bu kod parçasını çalıştırdığımızda göreceğimiz sonuç ise “Mon Nov 26 18:08:49 EET 2018” şeklinde anlaşılır bir tarihtir. İhtiyacımıza göre bu tarihi çeşitli formatlara sokup çıkarma işlemi yaparak session oluşturulduğundan bu yana geçen süre hesaplanabilir. Bu gibi formatlama, tarihler ile işlem yapma konuları Java Core başlığı altında incelenmesi gereken konular olduğu için daha fazla detaya girmiyorum.

Diğer bir senaryo ise kullanıcının geçerli session ile son işlem zamanına bakılarak bir iş yapılmak istenmesidir. Bu durumda yukarıda bahsettiğimiz yöntemin aynısı kullanılır. Fakat burada baz almamız gereken değer bize getLastAccessedTime() methodundan dönecek olan long tipindeki değerdir.

Son olarak örneğimizin çıktılarını da gözlemlemek gerekirse;

HttpSession in Servlet

HttpSession in Servlet

HttpSession in Servlet

HttpSession in Servlet

HttpSession in Servlet

HttpSession in Servlet

 

Soru, hata ve görüşlerinizi yoruma yazarsanız sevinirim. İyi çalışmalar 🙂

Kaynak : https://www.javatpoint.com/http-session-in-session-tracking

Share this Post

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*