IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Apache mod-rewrite et perte de session


Sujet :

Apache

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut Apache mod-rewrite et perte de session
    J'ai une application web qui fonctionne très bien, mais pour laquelle j'ai besoin de déporter des traitements sur un autre serveur J2EE.
    Je m'explique: l'application est développée en Struts et fait appel à une servlet (Fop) pour générer des éditions. Or pour des raisons de performances et de charge, on veut déporter la servlet Fop sur un serveur séparé, et ce de manière la plus transparente possible.

    La solution envisagée est donc d'utiliser Apache en frontal avec des règles de rewrite permettant de rediriger uniquement les appels à la servlet d'édition vers le second serveur.

    Jusque là tout va bien : Apache écoute sur le port 80, et redirige bien toutes les requêtes sur le port de mon serveur principal. Lors de l'appel à la servlet d'édition, la requête est bien redirigée vers le second serveur, et le document est affiché dans une popup, donc a priori pas de soucis du côté de la configuration du mod-rewrite (qui entre autre est configuré pour utiliser le mod-proxy).

    Le problème survient lorsque je ferme la popup et que je fais une action dans l'application : la session n'existe plus !

    J'ai bien sûr essayé de changer le contexte de la webapp de la servlet d'édition afin que celui-ci soit différent du contexte de l'application. Mais rien n'y fait.

    J'ai donc affiché les headers Http des différentes requêtes et là je m'aperçoit que des choses bizarres se passent au niveau des cookies et de la session:

    Durant la navigation dans l'application j'ai dans le header:
    Cookie: JSESSIONID=4UmPbWSgsPFdQ8-2pv:-1
    Lors de l'appel de la servlet d'édition, redirigé sur le second serveur, j'ai :
    Cookie: JSESSIONID=4UmPbWSgsPFdQ8-2pv:-1
    ...
    Set-Cookie: JSESSIONID=WzyweEaoVtkImKw2vZgiiof!-1361712417; path=/
    Et à la première action après l'édition j'ai:
    Cookie: JSESSIONID=WzyweEaoVtkImKw2vZgiiof!-1361712417
    et non pas l'identifiant de session du serveur principal !!!!

    A quoi cela est-il dû

    La session et le cookie sont bien associés à un serveur et un contexte d'application, ou juste au serveur ? Qui est censé créer la session : Apache au travers du Cookie ou le serveur d'application appelé par Apache ?

    Pour info, le serveur principal est sous Websphere et le secondaire sous Weblogic, mais j'ai aussi fait le test en inversant les 2 et j'obtiens le même résultat.

    J'ai en plus la contrainte de ne pas "casser" mon code, car je dois pouvoir fonctionner à la fois avec un ou deux serveurs

    Jacques Desmazières

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 352
    Points : 445
    Points
    445
    Par défaut
    Pour ceux que cela intéresse, j'ai résolu mon problème en modifiant la configuration du mod-rewrite dans Apache.

    Lors de mes tests j'avais la configuration suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteEngine On
    RewriteLog /Apache/Apache2.0.55/Apache2/logs/rewrite.log
     
    RewriteRule ^/(.*)/servletFop$ http://<server1:port1>/$1/servletFop [P]
    RewriteRule ^/(.*)$ http://<server2:port2>/$1 [P]
    Et j'ai remplacé les règles de réécriture par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^/(.*)/servletFop$ http://<server1:port1>/$1/servletFop [R,L]
    RewriteRule ^/(.*)$ http://<erver2:port2>/$1 [P]
    Ce qui force l'appel au server2 à passer par le browser (redirect), permettant ainsi la création d'un nouveau cookie associé à un autre serveur que celui hébergeant Apache. Et cela fonctionne que le contexte d'application soit le même ou pas sur les 2 serveurs.

    Jacques Desmazières

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2012, 15h03
  2. [TOMCAT][Apache] perte de session
    Par Aldowin dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/06/2010, 15h03
  3. [JSP][session] perte de session et sendRedirect
    Par blaz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/03/2007, 09h32
  4. Réponses: 2
    Dernier message: 24/11/2005, 19h13
  5. [VB.NET] Perte de session entre 2 projets
    Par TekP@f dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/05/2005, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo