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 :

Déconnection et bouton "retour"


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut Déconnection et bouton "retour"
    Bonjour à tous,

    Je fais actuellement un site avec authentification.

    Le fonctionnement de l'authentification (username/password) fonctionne correctement.

    La déconnection ne marche que partiellement... En effet après mettre déconnecté si je clique sur le bouton "Derniere page visitée" de mon navigateur, je retrouve une page propre à mon utilisateur...

    J'ai essayé pas mal de trucs, à coups de session_destroy, de headers et de if mais je n'ai pas trouvé a solution pour contrer ce bouton.

    HELP ME PLEASE ;-)

  2. #2
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 111
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_SESSION = array()
    session_unset();
    Je sais plus trop la syntaxe mais il ne devrais pas avoir de soucis.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Par défaut
    C'est tout à fait normal non ?
    c'est enregistré dans tes historiques !

    il se peut que je n'aie pas saisi la question...

  4. #4
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Citation Envoyé par dvauris Voir le message
    La déconnection ne marche que partiellement... En effet après mettre déconnecté si je clique sur le bouton "Derniere page visitée" de mon navigateur, je retrouve une page propre à mon utilisateur...
    Cela s'appelle tout simplement le cache du navigateur...
    Il n'affiche pas la page directement du serveur mais affiche la page que lui a mise en cache lorsque l'utilisateur l'a visité.
    Tu ne pourras donc rien faire contre ça.

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Citation Envoyé par Soull Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_SESSION = array()
    session_unset();
    Je sais plus trop la syntaxe mais il ne devrais pas avoir de soucis.
    J'ai testé cette fonction lorsque je me déconnecte mais malheureusement elle n'a pas le résultat attendu puisque lorsque je fais un refresh de la page précédente, je recharge des éléments dans ma session et par conséquent je ne peux pas faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(!isset($_SESSION))
    	{
    		header('Location: ../index.php');
    		exit();
    	}

  6. #6
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Dans ce cas c'est pas un soucis de cache mais de ton code qui ne prend aucunement en compte les sessions...
    Pour savoir si une personne est connectée on ne vérifie pas que le tableau $_SESSION existe, on vérifie l'un de ses index !
    Car avec session_start() $_SESSION existe toujours...

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Merci Transgohan de t'intéresser à mon problème ;-)

    Je te détaille mon code :

    - L'utilisateur se connecte via "index.php". Le contrôleur de l'appli redirige vers un fichier "testConnection.php" qui vérifie les informations envoyées par POST et si ces informations "username" et "password" sont correctes, les informations propres à la session sont renseignées. Le contrôleur récupère ensuite la main et envoie la page "bienvenue.php" qui contient un lien "Déconnexion".

    - L'utilisateur clique sur "Déconnexion", le contrôleur récupère l'URL et redirige vers un fichier "deconnexion.php" où je vide mes données propres à la session en cours et je réaffiche la page "index.php"

    Mon problème est lorsque je clique sur le bouton "retour" de mon navigateur, les infos de mon ancien POST sont envoyées et le chemin suivi par l'appli est le même que lorsque je me connecte directement. Donc les infos de session sont rechargées et je suis à nouveau connecté.

    Comment faire pour lorsque je clique sur ce bouton "retour", le contrôleur ne passe pas par "testConnection" ?

  8. #8
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    On ne fait jamais un bouton retour en cas de déconnexion...
    On déconnecte l'utilisateur et on le redirige vers la page d'accueil ou le formulaire de connexion via la fonction header() par exemple.

  9. #9
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Citation Envoyé par transgohan Voir le message
    On ne fait jamais un bouton retour en cas de déconnexion...
    On déconnecte l'utilisateur et on le redirige vers la page d'accueil ou le formulaire de connexion via la fonction header() par exemple.
    Je parlais du bouton "retour" du navigateur ;-)

    Lorsque l'utilisateur s'est déconnecté, il a toujours la possibilité de revenir en arrière. C'est ce fonctionnement que je n'arrive pas à gérer dans mon appli... Car comme je te l'ai dit précédemment, je repasse par le contrôleur et par le fichier "testConnection" qui va me réinitialiser ma session.

  10. #10
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Fonctionnement normal donc.
    Je ne vois pas comment tu pourrais modifier à partir du serveur le comportement du navigateur.

    Tu peux à la rigueur utiliser un token sur ton formulaire.
    Ainsi le retour en arrière renverra bien les données mais le token sera invalide ce qui ne connectera pas l'utilisateur.

  11. #11
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Hein hein ! Un token ! Je viens de regarder succinctement et ça m'a l'air pas mal du tout ça !

    Je te tiens au courant de l'avancement de mon appli et j'espère pouvoir passer ce sujet en "résolu" !

    Merci bcp

  12. #12
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Me revoilà ! Après quelques recherches sur les token, je me suis dit que malgré leur puissance en terme de sécurité, ils ne réglaient tjrs pas le problème du bouton précédent pour mon navigateur...

    En poursuivant mes recherches, je suis tombé sur ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <SCRIPT LANGUAGE="JavaScript">
    history.forward();
    </SCRIPT>
    Ce code en javascript empêche l'utilisateur d'utiliser le bouton précédent du navigateur pour revenir à la page où ce code a été positionné. C'est exactement ce qu'il me fallait.

    Merci Trangohan de t'être intéresser à mon problème.

  13. #13
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Le token résout totalement ton problème, tu as du mal comprendre son utilisation...

    Page du formulaire :
    - Génération d'un token
    - Enregistrement de ce token dans une variable de session
    - Valeur du token passé dans un champ du formulaire

    Page de vérification du formulaire :
    - vérification que le token du formulaire correspond à celui mis en session
    - SI ok => affichage
    SINON => retour formulaire de connexion

    Page de deconnexion :
    - suppression des variables de session (dont le token)

    Bref on peut voir avec ceci que lors de la déconnexion le token session est détruit, donc le test du token sur les pages ne sera pas valide et une redirection sera effectuée vers le formulaire de connexion.

    Et si malgré cela il t'affiche toujours la page cela provient du navigateur qui met en cache le rendu et ne réinterroge pas le serveur.

    PS : ta fonction javascript n'est pas efficace
    1) il suffit de désactiver le javascript pour la contourner
    2) certains navigateurs ne la prennent pas en compte

  14. #14
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Bah tu sais j'utilise un framework javascript - ExtJS - pour développer les vues de mon appli donc les internautes qui n'auront pas activer le javascript dans leur navigateur n'auront pas accès à l'appli de toute manière.

    Je ne doute pas du bien fondé des token mais un autre jour ;-)

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

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