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

Langage PHP Discussion :

Le retour navigateur me pose problème


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut Le retour navigateur me pose problème
    Bonjour à tous,

    Sur mon site, le retour navigateur me pose de gros problèmes ... voilà la structure simplifiée.

    - 1.php (dirigée vers 2.php en cliquant sur un lien)
    - 2.php (dirigée vers 3.php en automatique avec HTTP-EQUIV="Refresh" ...)
    - 3.php (dirigée vers 4.php en cliquant sur un lien)
    - 4.php (dirigée vers 1.php en automatique avec HTTP-EQUIV="Refresh" ...)
    - 1.php

    La page 3 est une page de vote où on rentre une valeur numérique, puis on valide pour reprendre le cycle ci-dessus (aller vers la page 4.php).
    Du coup en fin de cycle, quand je suis revenu sur la page 1.php, si je fais "retour navigateur", on revient sur 3.php, et je peux revoter ... c'est ce que je veux empêcher.

    Voilà les pistes que j'ai exploré ... en vain ...

    - utiliser la bdd que j'utilise déjà pour le site, mais le retour navigateur recharge la page à partir de l'historique donc pas moyen,

    - utiliser la fonction header no-cache ... ça ne fonctionne pas non plus

    - revenir de 2 pages en arrière (les pages de redirection ne comptant pas), mais javascript peut être désactivé.

    Les pistes qui me semblent les mieux adaptée

    - provoquer le message d'erreur "Avertissement : expiration du délai pour cette page " en agissant sur les variables de session C'EST CE QUE J'AIMERAIS UTILISER mais je ne vois pas comment.

    - en cas de retour navigateur, provoquer automatiquement un "refresh" ... mais je sais pas si c'est possible.

    PS: sous firefox tout marche nickel puisqu'il recharge la page en cas de "retour navigateur"

    Merci mille fois de l'aide que vous pourrez m'apporter parce que là mes méninges refont Greese dans ma tete

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Pour ma part, j'utilise un 'automate à états finis' avec une variable SESSION qui connait l'état actuel. C'est à dire que pour chaque action dans une page X, j'ai un contrôleur de page qui détermine si oui ou non le changement de page est possible.

    Ceci évite d'entrer directement des urls sans passer par certaine étape ...
    De même lors du retour navigateur, comme celà ne passe pas par le contrôleur, la variable SESSION contenant l'état actuel sera toujours à la page d'avant ET il suffira de faire un test sur l'état de la page pour revenir sur l'ancienne.
    Code de chaque page pour éviter les retour navigateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        if (session_id() == "") session_start();
        if( !isset( $_SESSION["chemin"] ) ) { 
         echo( "Page inaccessible, ..." ); 
         exit(); 
        }
    ...
     
        if( $_SESSION["chemin"] != "NomPageIci" ) {
            ... // traitement header propre
            header("Location: http....");
            exit;
        }

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Salut Fench, décidément, c'est toujours toi qui vient m'aider, faudra qu'un de ces 4 tu passes boire l'apéro pour te remercier
    Alors je crois avoir compris ton code mais pas certain certain ... dis moi si j'me trompe ...


    Ce code est uniquement pour lancer la session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if (session_id() == "") session_start();
    Si la variable de session contenant l'adresse de la page d'origine n'est pas présente, alors on n'affiche pas la page ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if( !isset( $_SESSION["chemin"] ) ) { 
         echo( "Page inaccessible, ..." ); 
         exit(); 
        }
    Si la variable de session contenant l'adresse de la page d'origine est différente de l'adresse de la page ou on veut éviter le retour, alors on renvoie vers la page contenue dans le header ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if( $_SESSION["chemin"] != "NomPageIci" ) {
            ... // traitement header propre
            header("Location: http....");
            exit;
        }

    Je suis pas sur d'avoir tout maitrisé là ... ça veut dire qu'il faut mettre en _session notre adresse de base (en gros le sommaire) par laquelle tout doit transiter?

    Merci du coup de main

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Presque ça

    Pour lancer la session, c Ok

    Pour !isset( $_SESSION["chemin"] ), c pour éviter de lancer une page quelconque par un url direct, c la variable globale qui contient la page actuelle de l'application. Cette variable est gérer par le controleur de page.

    Pour $_SESSION["chemin"] != "NomPageIci", c pour les retour navigateur. Exemple (pour faire simple) si tu es sur la page2.php, $_SESSION["chemin"] contiendra "page2", maintenant retour navigateur sur page1.php alors en début de page, il y aura le test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if( $_SESSION["chemin"] != "page1" ) {
            ... // traitement header propre
            header("Location: http.vers page 2");
            exit;
        }
    Est ce plus clair ?

    Maintenant, l'automate et des chemins plus compliqués c à voir en fonction de l'application

  5. #5
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par Fench Voir le message
    si tu es sur la page2.php, $_SESSION["chemin"] contiendra "page2", maintenant retour navigateur sur page1.php alors en début de page, il y aura le test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if( $_SESSION["chemin"] != "page1" ) {
            ... // traitement header propre
            header("Location: http.vers page 2");
            exit;
        }
    Ok merci pour l'explication, et pardon d'avance pour ma question de boulet, mais c'est la variable $_SESSION["chemin"] ... comment peut elle contenir "page2"? C'est a moi d'imposer cette variable en début de "page2" ou il faut que je m'arrange pour l'auto-incrémenter?

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Normalement c le rôle de l'automate (le controleur), ...
    Quasiment toutes mes pages php qui font parties des vues de l'application sont gérées par une page contrôleur (c le principe MVC) c'est à dire que pour aller d'une page vue (qui est une vue html+php+js+autres) à une autre, l'application passe obligatoirement par une page contrôleur et c là que les chemins sont mis à jour par une sorte d'automate à états finis.

    Pour toi tu peux très bien lors de tes liens ajouter une option pour savoir d'ou tu viens vers une même page (ex control.php) comme suit:
    Pour page1 à page2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="controleurs/control.php?action=verspage2">lien vers page2</a>
    Ensuite dans control.php et avant de rediriger vers page2, tu mettras à jour cette fameuse variable $_SESSION['chemin']

    C un début ensuite, tu pourras continuer sur des chemins plus complexes avec des données ....

  7. #7
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Ok merci pour tes explications ...
    Je viens de tester et y'a quand même un problème ... je suis sur "page1.php" qui est mon sommaire, et je vais sur "page2.php" qui est la page de vote, puis en validant "page2.php", je suis redirigé vers mon sommaire "page1.php". Entre temps, $_SESSION['chemin'] a repris la valeur "page1" jusque là je pense avoir tout saisi. Je fais "retour navigateur" pour voir si il me remet page2.php ... et malgré le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( $_SESSION["chemin"] != "..." ) {
            <META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://www....php"> }
    ... je peux ré afficher la page2.php (mon navigateur ré affiche à l'identique la page qui a été visitée j'ai testé echo de cette variable) pourtant si je réactualise F5 cette page, alors le test est concluant, et renvoie sur le <META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://www....php"> qui est parfaitement ce que je veux ...

  8. #8
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Je crois pas que tu passes par une page controleur !!

    Comment tu fais ta redirection de 2 à 1 et comment tu mets à jour ta variable SESSION

  9. #9
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Non en effet tu as raison, je gratte un peu de mon coté pour ce qui est de la page controleur que je ne maitrise pas ne sachant pas trop ce que c'est
    Donc j'ai essayé de coller au max à tes explications en mettant sur chaque entête de page $_SESSION['chemin'] = 'nom de page' .

    Voilà la structure:

    - page1.php (dirigée vers 2.php en cliquant sur un lien) Entete: $_SESSION['chemin'] = 'sommaire'

    - page2.php (dirigée vers 3.php en automatique avec HTTP-EQUIV="Refresh" ...) Entete: $_SESSION['chemin'] = 'vote'

    - page3.php (dirigée vers 4.php en cliquant sur un lien) Cette page à donc en session 'vote'

    - page4.php (dirigée vers 1.php en automatique avec HTTP-EQUIV="Refresh" ...) Entete: $_SESSION['chemin'] = 'sommaire'

    - page1.php Cette page à donc en session 'sommaire'

    Puis sur la page 'vote' cad la page3.php, le test de tout a l'heure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if( $_SESSION["chemin"] != "vote" ) { ?>
            <META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://www.PAGE1.php">
    <?php }
    else { 
    }
    Ou on teste la variable de session 'chemin' pour le cas ou retour navigateur revienne sur page 3 ... ET LE HIC EST ICI ... si on ne rafraichit pas, ça ne fonctionne pas, mais si on rafraichit, ça fonctionne nickel. Le navigateur réaffiche à l'identique la page3.php c'est là le problème.

Discussions similaires

  1. CFormView::OnIntialUpdate() pose problème
    Par jacklafrip dans le forum MFC
    Réponses: 1
    Dernier message: 26/09/2006, 15h37
  2. caractère \ pose problème
    Par questionneuse dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/07/2006, 16h25
  3. Un cast de SmartPointer qui pose probléme
    Par Higestromm dans le forum C++
    Réponses: 3
    Dernier message: 13/10/2005, 10h25
  4. jointure externe avec un where, me pose problème!
    Par Danae dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2005, 17h37
  5. Réponses: 3
    Dernier message: 17/05/2005, 11h16

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