2010-06-02 6 views
39

Kullanıcıya, oturum zaman aşımı aralığını değiştirmek için bir web arayüzü vermem gerekiyor. Dolayısıyla, web uygulamasının farklı yüklemeleri, oturumları için farklı zaman aşımlarına sahip olabilir, ancak web.xml farklı olamaz.Java web uygulamalarında oturum zaman aşımı dinamik olarak nasıl ayarlanır?

Yapı zaman aşımını programlı olarak ayarlamanın bir yolu var mı? Böylece, yapılandırılan aralığı okumak ve uygulama başlatması için ayarlamak için ServletContextListener.contextInitialized() kullanabilir miyim?

Çok teşekkürler.

cevap

63

Bir ServletContextListener kullanmak yerine, bir HttpSessionListener kullanın. sessionCreated() yönteminde, oturum zaman aşımını programsal olarak ayarlayabilirsiniz.

public class MyHttpSessionListener implements HttpSessionListener{ 
    public void sessionCreated(HttpSessionEvent event){ 
    event.getSession().setMaxInactiveInterval(15*60); //in seconds 
    } 
    public void sessionDestroyed(HttpSessionEvent event){} 
} 

Ve dağıtım tanımlayıcısı içinde dinleyicinin tanımlamak unutmayın: Hala

<webapp> 
... 
    <listeners> 
    <listener-class>com.example.MyHttpSessionListener</listener-class> 
    </listeners> 
</webapp> 

, ben her uygulama için farklı web.xml dosyaları oluşturma ve orada oturum zaman aşımı tanımlayan öneriyoruz:

<webapp> 
... 
    <session-config> 
    <session-timeout>15</session-timeout> <!-- in minutes --> 
    </session-config> 
</webapp> 
+0

http dinleyiciye web sayfasından geçirilen bir değişken tarafından statik 15 * 60 değiştirmek için bir yolu (tüm yeni oluşturulan oturumlar etkileyecek zaman aşımları chosse için?) Var mı? – user2133558

31

programlama

oturum zaman aşımı değerini ayarlamak için üç yol vardır oturum zaman aşımı ayarlamak için bir yolu var mı: Standart web.xml dosyada session-timeout kullanarak

  • ~ ya ~ Bu elementin yokluğunda
  • , (sunucu düzeyinde yapılandırmaya ve dolayısıyla) sunucunun varsayılan session-timeout değerini alarak ~ veya ~
  • programlı Servlet veya JSP HttpSession. setMaxInactiveInterval(int seconds) yöntemi kullanarak.

Ama bu genel bir ayar değildir, sonradan seçenek akım oturum için zaman aşımı değerini ayarlar unutmayın.

0

Diğer bir anonsçularda anlatıldığı gibi, bir Session Listener'da değiştirebilirsiniz. Ancak, örneğin, doğrudan servletinizde değiştirebilirsiniz.

getRequest().getSession().setMaxInactiveInterval(123); 
+2

Evet, bu mümkün, ancak "ne zaman" olacağını garanti etmez .. Ve servletinizin yaşam döngüsüne bağlıdır .. bu bir seçenek .. tamam .. Nore: Dinleyici her zaman olayı oluşturmaya ayarlayacaktır. –