Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre confirmé Avatar de Linio
    Inscrit en
    octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 431
    Points : 277
    Points
    277

    Par défaut Sessions différentes selon le navigateur

    Bonjour à tous,

    Je commence à être un peu à court d'idée, donc je viens chercher des lumières chez les experts. Je travaille sur une grosse application Java EE (Struts) sur un serveur d'application Oracle AS (plutôt vieillot).

    Aujourd'hui j'ai un problème, un objet que je stocke en session pour le recharger ensuite sur une autre page ne "revient pas" avec les mêmes données.

    Sur Firefox par contre le fonctionnement est correct. Je reste très perplexe quant au comportement de l'application car j'ai du mal à voir ce que le navigateur vient faire au niveau des sessions (je sais que chacun a sa mécanique de gestion de la récupération de session mais enfin...).

    J'ai tenté de débugger mon application sur Eclipse/Tomcat, et là, je vois ceci :
    Côté Firefox lors de l'appel à

    session.setAttribute("monobjet",monform);

    La référence indiquée est :

    fr.projet.ObjetForm@1a0e2d1[.....]

    Sur la page suivante lorsque je recharge :

    ObjetForm monform = session.getAttribute("monobjet");

    La référence indiquée est :

    fr.projet.ObjetForm@1a0e2d1[.....]

    Les valeurs sont identiques et les références de tous les "sous objets" sont aussi identiques.

    En revanche pour le même code sur Chrome ou IE, les références ne sont plus les mêmes (fr.projet.ObjetForm@ad8e84 et fr.projet.ObjetForm@1ee2c5) et pire certaines données ne sont plus les bonnes, exemple un string qui passe de :
    forward=success à forward=<null>

    Ma question globale est : Est-ce que ce comportement est normal? Pourquoi le comportement du serveur est différent selon le navigateur??

    D'autre part, est-ce qu'une fois mis en session mon objet peut être modifié et l'objet en session impacté dans la foulée ou bien il faut toujours explicitement faire un appel à getAttribute et setAttribute? Je pensais que c'était le second cas mais cela pourrait peut être expliquer le problème (bien qu'entre les deux appels la valeur de ce fameux forward n'est pas modifiée en théorie...).

    Voilà merci d'avance à ceux qui auront lu.
    Linio

  2. #2
    Expert Confirmé Sénior
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 970
    Points : 6 040
    Points
    6 040

    Par défaut

    comme ça je n esaurais te répondre.

    mais lorsque le serveur reçois une requete du navigateur il reçoit avec tout un tas d'informations parmi ces info il y a le UserAgent qui permet au serveur de connaitre les capacité du navigateur et il arrive souvent que les serveur soit configuré pour avoir des comportement légèrement différent d'un navigateur à l'autre.

    ça n'a donc rien d'étonnant.

    par contre en général ces réglages sont là pour que justement tous les navigateurs ait un comportement identique face au serveur (chose qu'ils n'ont pas par défaut)

    pour ce qui est des session ça me parait pas très normal.
    qu'en est-il de l'identifiant de session ?

    j'ai bien l'impression que tu ne récupère pas la même session.

    A+JYT
    A+JYT

  3. #3
    Membre Expert Avatar de fxrobin
    Homme Profil pro
    Formateur JAVA / XML
    Inscrit en
    novembre 2007
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur JAVA / XML
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2007
    Messages : 866
    Points : 1 188
    Points
    1 188

    Par défaut

    Comme le dit sekaijin, ta session doit "changer" car le navigateur :
    - n'a pas compris le cookie de session
    - n'a pas renvoyé le cookie de session

    tu peux faire un "session.getId();" pour obtenir l'ID et voir s'il change quand tu passes de page en page (normalement non)

    Est-ce que tu attaques Oracle AS directement où il a un serveur frontal style Apache ? si il y a un serveur frontal, est-ce mod_jk ou mod_proxy qui est utilisé pour forwarder les requêtes.

    Je crois me souvenir de ce genre de comportements un peu étrange avec de vieilles version d'apache en frontal. Comme ton projet n'a pas l'air d'être "récent" ...

  4. #4
    Membre Expert Avatar de fxrobin
    Homme Profil pro
    Formateur JAVA / XML
    Inscrit en
    novembre 2007
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur JAVA / XML
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2007
    Messages : 866
    Points : 1 188
    Points
    1 188

    Par défaut

    il me semblent aussi que les pages d'erreurs (404) invalident les sessions, surtout quand elle redirigent vers une page de login.

    Si jamais ta page appelle une ressource inexistante (favicon, images, css, etc...) qui génère une 404 "invisible", cela peut t'invalider la session.

    Le coup du favicon, me dit qqch d'ailleurs, et est lié effectivement assez à IE.

    Tiens :
    http://www.webperformance.com/load-t...server-stunts/


    pour créer un favicon :
    http://1loup.net/index.php/2007/02/2...x-valide-xhtml

  5. #5
    Membre confirmé Avatar de Linio
    Inscrit en
    octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 431
    Points : 277
    Points
    277

    Par défaut

    Tout d'abord merci de vos réponses.
    J'ai regardé, avec un test sous Chrome, je récupère bien l'identifiant de la session et il est identique sur la page A et la page B.

    Ce qui me semble étonnant c'est que le comportement semble similaire sur le serveur en production (OracleAS donc) et chez moi en debug (sur un bête Tomcat).

    Il n'y a pas de problème de ressources, lorsque j'analyse les requêtes, pour toutes les requêtes et ce depuis le début de mon test et le passage des pages précédant celle qui "bug", je n'ai que des 200 OK comme statuts.

    De ma connaissance nous ne passons effectivement pas sur les applications en direct mais par un WebCache, je vais donc me renseigner sur ce point là, mais vu que je reproduis le bug sur un Tomcat chez moi, le problème ne vient probablement pas de là (je n'ai pas de proxy sur mon propre poste...)

    Si vous avez d'autres idées...
    Linio

  6. #6
    Membre Expert Avatar de fxrobin
    Homme Profil pro
    Formateur JAVA / XML
    Inscrit en
    novembre 2007
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur JAVA / XML
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2007
    Messages : 866
    Points : 1 188
    Points
    1 188

    Par défaut

    un bug dans ton code, je ne vois plus que ça.

  7. #7
    Membre confirmé Avatar de Linio
    Inscrit en
    octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 431
    Points : 277
    Points
    277

    Par défaut

    Citation Envoyé par fxrobin Voir le message
    un bug dans ton code, je ne vois plus que ça.
    Un bug sur un code qui marche depuis un moment et qui marche aussi sur un autre browser ça me semble un peu ... étonnant. C'est pas comme s'il y avait des if (firefox) et if(ie) dans le programme java... m'enfin merci quand même...
    Linio

  8. #8
    Membre Expert Avatar de fxrobin
    Homme Profil pro
    Formateur JAVA / XML
    Inscrit en
    novembre 2007
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur JAVA / XML
    Secteur : Service public

    Informations forums :
    Inscription : novembre 2007
    Messages : 866
    Points : 1 188
    Points
    1 188

    Par défaut

    les sessions, c'est qqch qui marche très bien en JAVA, qqsoit le navigateur, donc y'a forcément un problème qqpart, et l'endroit le plus probable est ton application (code, configuration, etc.)

    est-ce que tu peux m'envoyer ton application pour que je regarde ?
    je te donne mon mail en MP si tu veux.

  9. #9
    Membre confirmé Avatar de Linio
    Inscrit en
    octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 431
    Points : 277
    Points
    277

    Par défaut

    Je poste ma réponse ici vu que ta boite MP est pleine :

    Bonjour,

    C'est très gentil de vouloir m'aider, malheureusement c'est une appli professionnelle que je ne peux certainement pas envoyer au petit vent

    Qui plus est vu la tête des bases de données, et de tous les trucs pour initialiser celle ci derrière tu aurais du mal je pense à reproduire le comportement exact dans le cas précis où je suis. Je vais essayer de faire un programme de test plus soft et voir si j'arrive à reproduire le comportement, je te tiens au courant.

    Merci en tout cas!
    Linio

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •