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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 ....

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