Sobes.tech
Middle

Nesneye oturumun geçersiz veya sona erdiğini nasıl bildirilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java web uygulamalarında bir nesneye HTTP oturumunun geçersiz kılınması veya sona erdirilmesi hakkında bildirimde bulunmak için, Servlet API spesifikasyonu tarafından tanımlanan oturum dinleyicileri (Session Listeners) kullanılır.

javax.servlet.http.HttpSessionListener arayüzünü uygulayan sınıflar, oturumların oluşturulması ve yok edilmesi hakkında bildirim alır.

import javax.servlet.http.HttpSessionEvent;  
import javax.servlet.http.HttpSessionListener;  
import javax.servlet.http.HttpSession;  

public class MySessionListener implements HttpSessionListener {  

    @Override  
    public void sessionCreated(HttpSessionEvent se) {  
        // Oturum oluşturulurken yapılacak işlemler  
        HttpSession session = se.getSession();  
        System.out.println("Oturum oluşturuldu: " + session.getId());  
    }  

    @Override  
    public void sessionDestroyed(HttpSessionEvent se) {  
        // Oturum yok edilirken yapılacak işlemler  
        HttpSession session = se.getSession();  
        System.out.println("Oturum yok edildi: " + session.getId());  

        // Oturumdaki attribute'lara erişip nesneleri bilgilendirebilirsiniz  
        MySessionObject myObject = (MySessionObject) session.getAttribute("myObjectKey");  
        if (myObject != null) {  
            myObject.notifySessionInvalidated(); // Nesnede method çağrısı  
        }  
    }  
}  

Dinleyiciyi kullanmak için, web.xml dosyasında veya @WebListener anotasyonu ile kaydetmek gerekir:

web.xml'e kayıt:

<web-app ...>  
    <listener>  
        <listener-class>com.example.MySessionListener</listener-class>  
    </listener>  
</web-app>  

@WebListener ile kayıt (Servlet 3.0 ve sonrası):

import javax.servlet.annotation.WebListener;  
import javax.servlet.http.HttpSessionEvent;  
import javax.servlet.http.HttpSessionListener;  

@WebListener  
public class MySessionListener implements HttpSessionListener {  
    // ... sessionCreated ve sessionDestroyed metodlarının implementasyonu
}

sessionDestroyed metodunun içinde, oturumda saklanan nesnelere (attribute'lar) erişebilir ve oturum sona erdiğinde bunları bilgilendirebilirsiniz, bu nesnelerde bu durumu ele alan özel bir metod çağırarak.

Bir nesne, oturumunun sona erdiğini bilmek istiyorsa, javax.servlet.http.HttpSessionBindingListener arayüzünü uygulayabilir. Bu nesneler, oturuma eklenip çıkarıldıklarında bildirim alır.

import javax.servlet.http.HttpSessionBindingEvent;  
import javax.servlet.http.HttpSessionBindingListener;  

public class MySessionBoundObject implements HttpSessionBindingListener {  

    @Override  
    public void valueBound(HttpSessionBindingEvent event) {  
        // Nesne oturuma eklendiğinde  
        System.out.println("Nesne oturuma bağlandı: " + event.getSession().getId());  
    }  

    @Override  
    public void valueUnbound(HttpSessionBindingEvent event) {  
        // Nesne oturumdan çıkarıldığında veya oturum yok edildiğinde  
        System.out.println("Nesne oturumdan çıkarıldı: " + event.getSession().getId());  

        // Burada, nesne oturumunun sona erdiğini bildiren mantık eklenebilir  
        notifySessionInvalidated(); // Örneğin, iç metod çağrısı  
    }  

    public void notifySessionInvalidated() {  
        System.out.println("MySessionBoundObject, oturumun sona erdiğini bildirdi.");  
        // Bu nesne için oturum sonlandırma işlemini burada yapabilirsiniz  
    }  
}  

MySessionBoundObject nesnesi, oturuma eklendiğinde (session.setAttribute("myObjectKey", myObject)), valueBound çağrılır. Oturum yok edildiğinde veya nesne oturumdan kaldırıldığında (session.removeAttribute("myObjectKey")), valueUnbound çağrılır. Bu sayede, valueUnbound, nesneye oturumunun sona erdiğini bildiren bir bildirim işlevi görebilir.