|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
Bonjour,
Je galère toujours avec un même problème en ce qui concerne un formulaire d'authentification. J'utilise la méthode décrite sur developpez.com (Utiliser une base de données pour sécuriser vos sessions), j'ai arrêté de m'embourber avec un script que j'avais tout seul. Seulement, je rencontre le même problème : quand je me déconnecte, si je clique sur le bouton précédent pour remonter à la page qui a envoyé les login et mot de passe dans des variables $_POST, le navigateur recréé les variables. Je dis recréé car j'efface les $_POST et $_SESSION. Dans une précédente discussion, on m'a dit que le navigateur allait recréer les variables (même si je les efface avant). On m'a conseillé de mettre no-cache en en-tête mais c'est inefficace. La session est détruite, les variables de session effacées ainsi que le cookie de session. Si quelqu'un a une idée, je ne sais pas quoi faire. Merci d'avance. PS : Si je n'ai pas été clair, n'hésitez pas à me demander d'autres explications. |
|
|
00
|
|
|
#2 | ||||||
|
Membre habitué
![]() Inscription : octobre 2006 Messages : 124 ![]() |
Comment fais-tu pour te déconnecter ? l'utilisateur doit cliquer sur un lien ?
Si c'est le cas, la solution que j'utilise et qui fonctionne, c'est de faire session_unregistrer('nomVariable') sur les variables de ta session qui permettent l'identification pour l'exemple, voici comment je procéde et si l'utilisateur se déconnecte de façon "propre" (en cliquant sur le lien déconnexion), il ne peut plus revenir sur des pages sécurisées qu'il a consulté avant sans s'identifier de nouveau. Formulaire d'identification : Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
En fait, les login/pwd ne sont pas enregistrés dans des variables de session.
L'id session est stocké dans la base associé à l'utilisateur connecté et il y a une vérification à chaque page. La logique est la suivante : Vérification de l'existence d'une entrée dans la base avec le numéro de session en cours. Si oui, on réactualise l'entrée avec un nouveau numéro de session (session_regenerate_id ()) et on affiche à l'écran un message du style : Bonjour, bressan avec un bouton de déconnexion. Si non : s'il n'existe pas de $_POST, on affiche le formulaire. Si elles existent, on vérifie dans la base qu'elles sont correctes, on créé une entrée dans la base associant le login et l'id de session puis on affiche le même message avec le bouton de déconnexion. Le problème vient donc bien des variables POST qui sont recréées par le navigateur lorsque l'on recharge la page (celle qui a envoyé le formulaire). Le script considère que les $_POST existent et sont correctes (ce qui est le cas) mais le problème est que si l'utilisateur qui fait précédent n'ai pas celui qui a les droits et bien c'est la m... Il me faudrait donc un moyen pour éviter la "re-création des $_POST". Voilà. |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
Tu as changé ton post j'avais pas vu ton code.
Je vais prendre le temps de lire ton code. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : octobre 2006 Messages : 124 ![]() |
Ok, je pense que ma solution ne te conviendra pas, car j'utilise uniquement les variables de session, je n'ai pas de table dans ma base pour gérer les connexions.
Par contre, en ce qui concerne tes variables login/pwd soumises par ton formulaire d'identification, elles sont persistantes ??? j'ai essayé de reproduire ton problème et pour moi les variables transimses par le formulaire n'existent que pour le script d'identification, ensuite, impossible de le retrouver dans une autre page, même en faisant précedent/suivant dans le navigateur. |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
J'ai lu ton script, et il me semble qu'il ait grosso modo identique au mien.
La logique est la même en tout cas. Tu pourrais essayer de de connecter, de naviguer sur une ou deux pages et de faire précédent pour revenir à ta première page pour voir. Normalement, ton navigateur va recharger tes $_POST et te donner une identification correcte. Ou alors il y a vraiment quelque chose que je ne fais pas correctement. Tu as répondu entre temps, j'efface mes $_POSt mais ils sont recréés. Je ne comprend pas pourquoi. |
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : octobre 2006 Messages : 124 ![]() |
C'est justement ce que j'ai fais et il ne m'a pas rechargé mes variables $_POST.
Le seul moyen que j'ai trouvé pour ne pas avoir à resaisir mes identifiants, c'est de supprimer mes variables de session (ce qui revient à ne plus effectuer de contrôle). Je pense que ton problème ne provient pas des variables $_POST mais plutôt du contrôle que tu fais. Comment constates-tu dans ta base que l'utilisateur s'est déconnecté ? |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
L'utilisateur est déconnecté si l'identifiant de la session courante n'est pas dans la base.
Une fois l'identification de l'utilisateur réussie, je stocke dans la base l'identifiant de l'entrée de la table utilisateur dans une table session associé à l'id de la session. Par exemple : id_session="e32r...213", id_user=3. Quand l'utilisateur se déconnecte, cette entrée est supprimée. Mais lorsque je fais précédent, le sript voit qu'il n'y a pas d'entrée dans la base associée avec l'id de session mais croit que les $_POST ont été envoyées et créé une entrée dans la base (id_session="458a...213", id_user=3) et reconnecte l'utilisateur. Si pour le navigateur, les $_POST n'étaient pas envoyées il afficherait le formulaire. Je fais des tests un peut n'importe comment et plus rien ne marche. Je résouds ça et je le mets en ligne pour que tu puisses faire un test de toi même. Si tu veux je t'afficherais mon code. Ad'tal |
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : octobre 2006 Messages : 124 ![]() |
Lorsque l'utilisateur fait "précédent" où le script récupére-t-il l'id utilisateur ? par $_POST['id_user'] ?
|
|
|
00
|
|
|
#10 | ||||
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
Bon, voici le lien pour voir grandeur nature : http://bressan.webou.net
Le code dans les pages est : Code :
Et celui de la page de vérification (qui correspond à celui décrit sur developpez.com) : Code :
Voilà. Une idée ???? |
||||
|
|
00
|
|
|
#11 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
Login=test
Pwd=test Sans ça va aller moins bien. |
|
|
00
|
|
|
#12 | |||
|
Membre habitué
![]() Inscription : octobre 2006 Messages : 124 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
J'ai rajouté : Avec ! sinon, j'affiche le formulaire si la variable est définie.
Le résultat est identique. |
|
|
00
|
|
|
#14 | ||
|
Membre habitué
![]() Inscription : octobre 2006 Messages : 124 ![]() |
J'ai été faire des tests sur ton site et j'ai constaté quelque chose de bizarre, lorsque je fais précédent, le formulaire d'identification est rempli... et je n'arrive pas à comprendre pourquoi car sur tous les autres sites ca n'est jamais le cas... Tu utilises les cookies ?
Sinon, une solution serait peut-être lors de la déconnexion de faire : Code :
|
||
|
|
00
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
J'ai une idée. Si je ne fais pas de session_regenrate-id (), l'id de session ne change pas lorsque l'on fais précédent. Je trouve ça d'ailleurs curieux dans la mesure ou je détruit ma session mes $_SESSION et le cookie de session mais bon !?!
Si j'ajoute un champ booleen dans ma table et que si l'id de session est dans la table mais avec un booleen à FALSE j'affiche le formulaire ça peut marcher peut être. Je vais essayer en attend si une idée vient, je veux bien. En tout cas, même si le problème persiste toujours, merci pour le temps consacré. |
|
|
00
|
|
|
#16 | ||
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
Décidément, on croise nos réponses, non j'utilise pas les cookies.
J'efface tout plusieurs fois lors de la déconnexion : Code :
|
||
|
|
00
|
|
|
#17 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
C'est toujours pas bon, heureusement le moral ne baisse pas aussi vite que prévu.
On continue ... |
|
|
00
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
J'ai bien vérifié si c'est un problème de cookie.
Je me connecte et je me déconnecte. J'efface les cookies du navigateurs et je fais précédent. Et je suis reconnecté. Donc le soucis ne vient pas de là. Je pense qu'il vient bien du fait que les $_POST sont recréées. Est il possible que le serveur garde une trace de tous les $_POST ou alors le navigateur ??? |
|
|
00
|
|
|
#19 |
|
Nouveau Membre du Club
![]() Inscription : mars 2006 Messages : 124 ![]() |
Je cherche des infos et sur http://matthieu.developpez.com/authentification/ il est marqué :
"Les champs de type password offrent une protection contre les yeux baladeurs par l'affichage d'astérisques à la place des caractères tapés, et leurs valeurs ne sont pas mises en cache par le navigateur." Donc mon problème ne vient pas d'un stockage de variable du navigateur. Donc est il possible que le serveur garde une trace de tous les $_POST ??? |
|
|
00
|
|
|
#20 |
|
Membre habitué
![]() Inscription : octobre 2006 Messages : 124 ![]() |
Je ne sais pas si tu as pu avancer sur ton problème, mais en effectuant de nouveaux tests ce matin, j'ai exactement le même comportement avec mon site... En fait, lorsque tu fais "précédent", tu n'es plus connecté, je pense que le navigateur t'affiche la page qu'il a en cache (le php n'est pas éxécuté de nouveau) car après avoir fait précédent, si je rafraichis la page, j'arrive sur le formulaire d'identification).
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com