2011-01-29 15 views

cevap

2

Cevabınız optimal görünüyor. Başka bir yolu da doğrudan bu şekilde Cookes manipüle etmek olacaktır:

Cookie cookie = new Cookie ("JSESSIONID", "randomValue"); 
cookie.setMaxAge(0); 

böylece aynı adla yeni bir çerez oluşturmak ve hemen sona ama seninki daha temiz beri bu şekilde gidiş önermiyoruz ve temel Servlet API'larına aşina olan herkes için oldukça açıktır.

+0

Aslında bunu kullanacağım, çünkü "güvenli" bayrağı yanlış olarak ayarlayabileceğim. Tomcat, "true" olarak ayarlıyor, çünkü ben SSL – Bozho

+0

aracılığıyla kimlik doğrulaması yapıyorum, aslında işe yaramadı - bir şekilde var olanı geçersiz kılmak yerine iki özdeş JSESSIONIDs yolladı. Bu yüzden şimdi tüm sıfırlamayı bırakmak zorunda kaldım. Ama hala kabul edilen cevabı koruyarak, en eksiksiz olarak. – Bozho

3

Ben sadece oturumu elde ettiğimiz isteği geçmektedir. Bir oturum henüz mevcut değilse, sadece onu geçersiz kılmak için bir tane yaratmanın bir anlamı yoktur. Bu, oturum kapsayıcı tarafından yeni oluşturulduysa da geçerlidir (kullanıcının ilk oturum açma isteği doğrudan giriş formunda olduğu için).

public static ... (HttpServletRequest request) { 
    HttpSession session = request.getSession(false); 
    if (session!=null && !session.isNew()) { 
     session.invalidate(); 
    } 
+0

iyi bir oturum kimlik doğrulaması önce (Ben özel bir kimlik doğrulama, yerleşik bir http Yetkilendirmeler kullanın) bulunmalıdır ... en iyi yol olduğunu düşünüyorum. Kullanıcı giriş sayfasını açtığında, bir oturum oluşturulur. – Bozho

+0

Webapps'lerimde oturum oluşturma konusunda çok uygun olmayı tercih ediyorum. Bir http oturumu, yalnızca gerekli olduğunda Java kodu tarafından oluşturulmaktadır. Bir giriş formunu görüntülemek genellikle herhangi bir durum yönetimi gerektirmez. – cherouvim

+0

@Bozho ne cherouvim diyor öncesinde kimlik doğrulaması oturum yönetimine, çok doğru (veya gerekli görülen diğer durum) kolayca (sadece tam olarak aynı GET isteği yürütülürken yani oturumu ama asla mağaza oluşturma sayfasını diyoruz) OOM DoS istismar edilebilir . Bu yüzden en iyi cevap budur (yorum ile birlikte) – bestsss

2

Tomcat (6.0.24 AFAIK beri) otomatik kimlik doğrulamasını SessionID değişebilir - sürece standart servlet kimlik doğrulama mekanizmaları (temel, form tabanlı kimlik doğrulaması) kullandığınız olarak. Bu temel Şifrematik Vanası için changeSessionIdOnAuthentication aracılığıyla yapılandırılabilir: http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html

+0

teşekkürler, ancak özel bir kimlik doğrulaması kullanıyorum. – Bozho

1

bir başka yolu (değil iyi bir yol) rastgele yeni akım oturumun oturum kimliği değişecek 'changeSessionId (existingSession)' org.apache.catalina.session.StandardManager ait çağırmaktır oluşturulan oturum kimliği.

Bunu yöntemi çağırmak için StandardManager MBean kullanmak zorunda. bakınız Tomcat MBeans

Sözde kod:

ObjectName contextObjectName = new ObjectName ("Catalina: type = Müdürü, yol =/neyse, host = whateverhost");

mbeanServer.invoke (contextObjectName, "changeSessionId", yeni Object [] {session}, new String [] {"javax.servlet.http.HttpSession"});

İlgili konular