2010-10-18 14 views
5

Abbiamo recentemente modificato il nostro accesso per utilizzare HTTPS e stiamo riscontrando problemi con il login.Accesso HTTPS non salvando il JSESSIONID in un cookie

Dopo l'accesso, l'utente viene reindirizzato a una pagina (criptata) non crittografata. Quando raggiunge questa pagina, il sito controlla se l'utente ha effettuato l'accesso. Crea una nuova sessione e sembra che l'utente non abbia effettuato l'accesso, e quindi il nostro utente viene reindirizzato alla pagina di accesso. Se l'utente si collega nuovamente, funzionerà.

I cookie non sono impostati come solo https, ma sembra che non funzionino sulle pagine http.

Qualcuno sa perché questo potrebbe accadere.

Edit:

Avrei detto che la pagina che visualizza l'accesso è su un URL diverso. (Esiste una pagina di accesso dal computer che esegue l'istanza di tomcat, ma il sito di marketing è installato su wordpress e utilizza un dominio diverso).

Non posso utilizzare il primo metodo di richiesta HTTP per impostare il cookie, poiché le impostazioni predefinite di Internet Explorer impediscono il salvataggio del cookie di sessione.

+0

È possibile inviare la sessione come parametro post alla pagina http e impostare la sessione sul nuovo dominio? –

+0

OP ha dichiarato che non sarebbe in grado di verificare alcuna risposta chiudendo come TL. – Kev

+0

Questo deve essere riaperto dai poteri che sono come è un problema reale e in corso che sembra impossibile da risolvere. Abbiamo una squadra di sviluppatori che hanno cercato di trovare una soluzione per mesi. L'aggiornamento di Tomcat non ha funzionato come sembra essere un comportamento previsto, ma questo comportamento previsto rende impossibile lavorare con domini esterni e questo non è molto web 2.0! –

risposta

1

Quando si utilizza https tomcat stabilisce jsessionid tramite un cookie sicuro, che non può essere trasmesso attraverso una connessione non protetta. Quindi quando torni a http la sessione è persa.

La soluzione alternativa (che non ho eseguito personalmente) sembra stabilire la sessione tramite una richiesta http prima di reindirizzare a https e quindi impostare un filtro in HttpRequestWrapper per collegarlo al cookie non protetto.

Non so molto di questo, ma qui ci sono un paio di riferimenti:

+0

Mi chiedo perché funzioni per te quando l'utente effettua il login per la seconda volta, però. – christian

+0

Perché uno dei reindirizzamenti va a una pagina HTTP (non protetta). – partkyle

+0

Funzionerebbe, ma il problema è che il nostro sito di marketing si trova su un URL diverso, che impedisce a Internet Explorer (con le impostazioni predefinite, al più) di impostare un cookie da un altro dominio. Avete qualche idea al riguardo? – partkyle

3

Abbiamo questo problema con la nostra app. Volevamo un comportamento simile di accesso tramite https, quindi reindirizzamento a una pagina http.

Il problema è che quando Tomcat crea la sessione sotto https, crea un cookie sicuro che non può essere letto in http. Nota che questo continua a essere archiviato come un bug in Tomcat e viene contrassegnato come "non un bug".

La soluzione che abbiamo finito si basa sul messaggio in questo forum http://forum.java.sun.com/thread.jspa?threadID=197150&start=0

Citando dal thread del forum: "Un modo per mantenere la sessione in Tomcat, quando il cookie di sessione è sempre creato in modalità SSL è ingannare il browser creando il cookie non sicuro, quando viene creato il cookie sicuro. " Ciò avviene tramite un filtro che avvolge la richiesta e sovrascrive request.getSession(). Ha funzionato molto bene per noi.

Come nota a margine, il reindirizzamento da una pagina https a http farà apparire un messaggio di avviso in alcune versioni di Internet Explorer "Stai per essere reindirizzato a una connessione non protetta". L'unico modo che abbiamo trovato per evitare questo è di avere il reindirizzamento fatto con un tag meta refresh. In particolare, restituire una pagina vuota dalla richiesta https originale con un metatag che si aggiorna a una pagina http. Ciò evita il messaggio di avvertimento a spese di rendere il codice leggermente più complicato.

(Ho appena notato che alcuni dei consigli qui sono la ripetizione di una risposta precedente - Mi scuso, ma pubblicherò comunque poiché proviene da esperienza diretta).

Modifica: Vedo nei vostri commenti che avete due domini, che complicano l'uso dei cookie. È possibile utilizzare un proxy o un server Web come Apache per presentare un solo dominio agli utenti finali?

+0

Il nuovo URL per il thread del forum menzionato sembra essere https://forums.oracle.com/forums/thread.jspa?threadID=1394970 – ivant

0

Se hai verificato che il flag di solo sicurezza è disattivato e che il primo cookie viene eliminato correttamente, suppongo che potrebbe esserci un problema relativo al percorso che impedisce al cookie di essere nuovamente presentato.

Problemi correlati