2010-11-24 18 views
8

2 gün boyunca bu problem üzerinde çalışıyorum ve buradaki herkesin benzer bir sorunu ve çözümü olduğunu düşünüyorum.Tomcat her istek için yeni bir oturum oluştur

sorun: Bu başlangıç ​​sayfası o (HTML meta yenileme etiketlerini kullanarak) bir JSP Sayfa müşteriyi yönlendirir istendiğinde Tomcat 6. çalışan bir Spring MVC (2.5.6.) Web Uygulaması, var İçeriği çok sayıda Ajax isteği ile yükler (Çerçeve: Prototip). Sorun, Tomcat'in her AJAX talebi için yeni bir oturum oluşturmasıdır (yaklaşık 67 seans). İlk düşüncem, Oturum Çerezinin başlangıç ​​sayfası yüklendikten sonra saklanması ve Ajax istekleri Tomcat'i yeni bir oturum oluşturmaya zorlamasıydı. Benim yaklaşımım, oturum çerezini elle oluşturmaktı, ancak bu hiçbir fark yaratmadı. Komik olan şey, diğer bazı tomcat örneklerinde çalıştığı, ancak bütünleştirme testleri için istenen ortamda çalışmadığıdır. Benim görüşüme göre bir Tomcat yapılandırma sorunu.

Request Header 1: 
Cookie JSESSIONID=F3206CBF2C961E125821FF22FA31A02D 

Response Header 1: 
Set-Cookie JSESSIONID=49E000B4D6880F4F94531AB9C78DB667; Path=/JOCA-Music-Portal JSESSIONID=50B5EA0BCFE811C744CE9C1F9EDE0097; Path=/JOCA-Music-Portal 

Request Header 2: 
Cookie JSESSIONID=50B5EA0BCFE811C744CE9C1F9EDE0097 

Response Header 2: 
Set-Cookie JSESSIONID=DCCA2D1B98D11223A6B8855800276E27; Path=/JOCA-Music-Portal 

GÜNCELLEME: Daha fazla araştırma sorunu izole

Firebug ile ilgili ayrıntılı araştırma yapılmış Tomcat doğru jsessionid kendisine transfer olsa bile her istek için yeni bir oturum (50B5EA0BCFE811C744CE9C1F9EDE0097) oluşturur öğrendim Tomcat Realm yapılandırması. Giriş için bir JDBC Realm kullanıyoruz. Giriş deativated olduğunda, sadece bir Seans oluşturulur. Etkinleştirilirse, Tomcat geçersiz/süresi dolmuş oturumlar oluşturur, bu nedenle her istekte yeni bir oturum oluşturulur. Ama Tomcat neden böyle davranıyor?

Gerçekten çaresizim, bu yüzden herhangi bir düşünce/ipucu/çözüm iyi karşılandı.

size Müşterinle ve sunucu arasında analyze the HTTP traffic deneyebilirsiniz

+0

Çözümü aldın: Çözüm açıkça org.apache.catalina.authenticator.AuthenticatorBase devraldığı bizim sınıfın yapıcısı içinde kapatmak zorunda idi? –

cevap

3

çok teşekkür ederim. Çerez başlığının istekte ve yanıtta doğru şekilde ayarlandığından emin olun.

Firefox kullanıyorsanız, Firebug ile hata ayıklamayı deneyebilirsiniz.

+0

Her şeyden önce cevabınız için çok teşekkür ederim. Çerez başlığı doğru şekilde ayarlandı, Firebug ile kontrol ettim. Diğer bazı ortamlarda sorunsuz çalıştığını, entegrasyon testi ortamlarında olmadığını söylemeyi unuttum. – Fabe

+0

Tomcat yapılandırmanızın '' bölümünüzde 'cookies = false' var mı? UseHttpOnly' değeri nedir? – gawi

+0

Hayır /META-INF/context.xml dosyasında herhangi bir içerik bölümü tanımlamadım ve bu nedenle çerezler ve useHttpOnly ayarlanmadı. Bir context.xml tanımlamalı mıyım? – Fabe

2

Yakın zamanda geliştirdiğimiz bir uygulama ile aynı soruna girdik. Bulmaya gelince, sorun Tomcat'in oturum sabitleme saldırılarını engellemek için değiştirildi. Varsayılan olarak, kimlik doğrulamada yeni bir oturum kimliği oluşturulur. Bu 6.0.21 ile başladı. Bağlam yapılandırma seçeneğine 'changeSessionIdOnAuthentication' (tomcat bug/issue https://issues.apache.org/bugzilla/show_bug.cgi?id=45255) 'ı göz atın.

+0

Çok teşekkür ederim! - Kontrol edeceğim;) – Fabe

0

Aynı soruna girdik, ancak özel EXTERNALSSO kimlik doğrulaması kullanırken.

super.setChangeSessionIdOnAuthentication(false); 
İlgili konular