2010-10-18 4 views
5

Nous avons récemment modifié notre connexion pour utiliser HTTPS, et nous rencontrons des problèmes avec la connexion. Après la connexion, l'utilisateur est redirigé vers une page (HTTP) non cryptée. Quand il atteint cette page, le site vérifie si l'utilisateur est connecté. Il crée une nouvelle session et il apparaît que l'utilisateur n'est pas connecté, et donc notre utilisateur est redirigé vers la page de connexion. Si l'utilisateur se connecte à nouveau, cela fonctionnera.Connexion HTTPS ne pas enregistrer le JSESSIONID dans un cookie

Les cookies ne sont pas configurés uniquement en https, mais il semble qu'ils ne fonctionnent pas sur les pages http.

Est-ce que quelqu'un sait pourquoi cela pourrait se produire.

Edit:

Je aurais dû mentionner que la page qui affiche la connexion est sur une autre URL. (Il existe une page de connexion de la machine exécutant l'instance tomcat, mais le site marketing est installé sur WordPress et utilise un domaine différent).

Je ne peux pas utiliser la première méthode de demande HTTP pour définir le cookie, car les paramètres Internet Explorer par défaut empêchent l'enregistrement du cookie de session.

+0

Pouvez-vous soumettre la session en tant que paramètre de publication à la page http et la configurer sur le nouveau domaine? –

+0

OP a déclaré qu'il ne serait pas en mesure de vérifier les réponses qui se ferment comme TL. – Kev

+0

Cela doit être rouvert par les pouvoirs en place car il s'agit d'un problème réel et permanent qui semble impossible à résoudre. Nous avons une équipe de développeurs qui ont essayé de deviner une solution pendant des mois. La mise à niveau de Tomcat n'a pas fonctionné car il semble que ce soit un comportement intentionnel, mais ce comportement prévu rend impossible l'utilisation de domaines externes et ce n'est pas très le web 2.0! –

Répondre

1

Lors de l'utilisation de https tomcat établit le jsessionid via un cookie sécurisé, qui ne peut pas être transmis via une connexion non sécurisée. Donc, quand vous retombez à http, la session est perdue. La solution de contournement (que je ne l'ai pas fait moi-même) semble établir la session par le biais d'une requête http avant de rediriger vers https, puis définir un filtre dans le HttpRequestWrapper pour se connecter au cookie non sécurisé.

Je ne sais pas grand-chose à ce sujet, mais voici quelques références:

+0

Je me demande pourquoi cela fonctionne pour vous lorsque l'utilisateur se connecte pour la deuxième fois, cependant. – christian

+0

Parce que l'une des redirections va à une page HTTP (non sécurisée). – partkyle

+0

Cela fonctionnerait, mais le problème est que notre site marketing se trouve sur une URL différente, ce qui empêche Internet Explorer (avec les paramètres par défaut, au moins) de définir un cookie à partir d'un autre domaine. Avez-vous des idées à ce sujet? – partkyle

3

Nous avons ce problème avec notre application. Nous voulions un comportement similaire de connexion via https, puis rediriger vers une page http.

Le problème est que lorsque Tomcat crée la session sous https, il crée un cookie sécurisé qui ne peut pas être lu dans http. Notez que cela continue d'être classé comme un bug dans Tomcat et d'être marqué comme "pas un bug".

La solution nous avons fini est basé sur le message dans ce forum http://forum.java.sun.com/thread.jspa?threadID=197150&start=0

Je cite le fil du forum: « Une façon de maintenir la session dans Tomcat, lorsque le cookie de session est obtenir créé en mode SSL pour tromper le navigateur en créant le cookie non sécurisé, lorsque le cookie sécurisé est créé. " Ceci est accompli via un filtre qui enveloppe la requête et remplace request.getSession(). Cela a très bien fonctionné pour nous. En guise de remarque, la redirection d'une page https vers http fera apparaître un message d'avertissement dans certaines versions d'Internet Explorer "Vous êtes sur le point d'être redirigé vers une connexion qui n'est pas sécurisée." Le seul moyen que nous avons trouvé pour éviter cela est d'avoir la redirection effectuée avec une balise meta refresh. Spécifiquement, renvoyez une page vierge de la demande https d'origine avec une balise meta qui actualise à une page http. Cela évite le message d'avertissement au détriment de rendre le code légèrement plus compliqué.

(Je viens de remarquer certains des conseils ici est une répétition d'une réponse précédente - je m'excuse, mais posterai de toute façon, car il est de l'expérience directe).

Modifier: Je vois dans vos commentaires que vous avez deux domaines, ce qui complique l'utilisation des cookies. Pouvez-vous utiliser un proxy ou un serveur Web tel qu'Apache pour présenter un seul domaine aux utilisateurs finaux?

+0

La nouvelle URL pour le forum mentionné semble être https://forums.oracle.com/forums/thread.jspa?threadID=1394970 – ivant

0

Si vous avez vérifié que l'indicateur de sécurité seule est désactivé et que le premier cookie a été supprimé correctement, j'imagine qu'il peut exister un problème de chemin qui empêche la présentation du cookie à nouveau.

Questions connexes