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

PHP & Base de données Discussion :

changer de mot de passe sans être déconnecté de suite [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 42
    Points : 14
    Points
    14
    Par défaut changer de mot de passe sans être déconnecté de suite
    Bonjour,

    Je suis entrain de créer un annuaire en php/mysql. J'ai un petit problème.
    L'utilisateur connecté peut modifier ses données, notamment son mot de passe. J'utilise les sessions.
    Le problème est que dès que l'utilisateur change son mot de passe, ça le déconnecte de suite. Que faut-il faire pour qu'il ne soit pas déconnecté dès le changement du mot de passe?

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    simplement , il faut enlevé la partie de déconnexion.
    avec ton code posté la repense sera plus précise

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 227
    Points
    20 227
    Par défaut
    Changer un mot de passe c'est à priori juste modifier une valeur dans une base de données.
    C'est toi qui doit terminer la session après cette action , il suffit donc de ne pas le faire ...
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 42
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par redoran Voir le message
    simplement , il faut enlevé la partie de déconnexion.
    avec ton code posté la repense sera plus précise

    Voici mon code, je n'ai mis que ce qui pouvait intéresser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    <?php
    require("fonctions.php") ;
     
     
    session_start() ;
    $connexion = connexion() ;
    $nom = $_SESSION['nom'];
    $prenom = $_SESSION['prenom'];
    $naissance = $_SESSION['naissance'];
    $salt = "ashrihgbjnbfj";
    $pass = crypt($_SESSION['pass'], $salt);
    $mail = $_SESSION['mail'] ;
    $id_utilisateur = $_SESSION['id_utilisateur'] = getID($nom, $prenom, $mail);
    $id_role = $_SESSION['id_role'] = role($id_utilisateur);
    $id_statut = $_SESSION['id_statut'] = statut($id_utilisateur);
    $message = "";
     
     
     ######################## traitement pour modification ##################################
    if(isset($_POST['modifier'])) {
    	if ($id_role >= 2){
    		$mail_modif = stripslashes($_POST['mail']);
    		$nom_modif = stripslashes($_POST['nom']);
    		$prenom_modif = stripslashes($_POST['prenom']);
    		$naissance_modif = stripslashes($_POST['naissance']);
    		$mdp_modif = $_POST['mdp'];
     
    		if ($mail_modif!=""){
    			$res_modif = mysql_query ("UPDATE utilisateur AS u, roles_utilisateur AS ru SET mail='$mail_modif' WHERE u.id = ru.id_utilisateur AND id_role = '$id_role' AND u.id = '$id_utilisateur'");
    			if($res_modif <> False) {
    					$message .= "<p class=\"succes\">Adresse Email modifié dans la base de données.</p>";
    			} else {
    					$message .= "<p class=\"erreur\">Erreur lors de la modification de l'adresse Email.</p>" ;
    			}
    		}
     
    		if ($nom_modif!=""){
    			$res_modif = mysql_query ("UPDATE utilisateur AS u, roles_utilisateur AS ru SET nom='$nom_modif' WHERE u.id = ru.id_utilisateur AND id_role = '$id_role' AND u.id = '$id_utilisateur'");
    			if($res_modif <> False) {
    					$message .= "<p class=\"succes\">Nom modifié dans la base de données.</p>";
    			} else {
    					$message .= "<p class=\"erreur\">Erreur lors de la modification du nom.</p>" ;
    			}
    		}
     
    		if ($prenom_modif!=""){
    			$res_modif = mysql_query ("UPDATE utilisateur AS u, roles_utilisateur AS ru SET prenom='$prenom_modif' WHERE u.id = ru.id_utilisateur AND id_role = '$id_role' AND u.id = '$id_utilisateur'");
    			if($res_modif <> False) {
    					$message .= "<p class=\"succes\">Prénom modifié dans la base de données.</p>";
    			} else {
    					$message .= "<p class=\"erreur\">Erreur lors de la modification du prénom.</p>" ;
    			}
    		}
     
    		if ($naissance_modif!=""){
    			$res_modif = mysql_query ("UPDATE utilisateur AS u, roles_utilisateur AS ru SET naissance='$naissance_modif' WHERE u.id = ru.id_utilisateur AND id_role = '$id_role' AND u.id = '$id_utilisateur'");
    			if($res_modif <> False) {
    					$message .= "<p class=\"succes\">Date de naissance modifié dans la base de données.</p>";
    			} else {
    					$message .= "<p class=\"erreur\">Erreur lors de la modification de la date de naissance.</p>" ;
    			}
    		}
     
    		if ($mdp_modif!=""){
    			$res_modif = mysql_query ("UPDATE utilisateur AS u, roles_utilisateur AS ru SET pass=ENCRYPT($mdp_modif, 'ashrihgbjnbfj') WHERE u.id = ru.id_utilisateur AND id_role = '$id_role' AND u.id = '$id_utilisateur'");
    			// Suivant si la modification a été un succès ou pas, on affiche un autre message.						
    			if($res_modif <> False) {
    					$message .= "<p class=\"succes\">Mot de passe modifié dans la base de données.</p>";
    			} else {
    					$message .= "<p class=\"erreur\">Erreur lors de la modification du mot de passe.</p>" ;
    			}
    		}
    	}
     
    }
     
     ######################## formulaire pour modification ##################################
     
     
    if(connexionUtilisateurReussie()) {
    	debuthtml("Annuaire M2 DEFI - Gestion de profil","Annuaire M2 DEFI", "Gestion du profil") ;
    	echo $message ;
    if ($id_role == 2) {
    		affichetitre("Étudiant actuel :","3") ;
    		echo "<p>Modifiez vos données en les remplaçant dans les champs appropriés.</p>" ;
    		echo "<form id=\"form1\" action=\"gestionProfil.php\" method=\"post\">
    				<fieldset>
    					<legend>Données personnelles :</legend>
    					<p>
    						<label for=\"nom\">Nom * : </label>
    						<input type=\"text\" id=\"nom\" name=\"nom\" value=\"$nom\" />
    					</p>
    					<p>
    						<label for=\"prenom\">Prénom * : </label>
    						<input type=\"text\" name=\"prenom\" id=\"prenom\" value=\"$prenom\" />
    					</p>
    					<p>
    						<label for=\"naissance\">Date de naissance * : </label>
    						<input type=\"text\" id=\"naissance\" name=\"naissance\" value=\"$naissance\" />
    					</p>
    					<p>
    						<label for=\"mail\">Adresse E-Mail * : </label>
    						<input type=\"text\" id=\"mail\" name=\"mail\" value=\"$mail\" />
    					</p>
    					<p>
    						<label for=\"mdp\">Nouveau mot de passe * : </label>
    						<input type=\"password\" name=\"mdp\" id=\"mdp\" value=\"\" />
    					</p>
    				</fieldset>
    		";
    	}
     
     
    	afficheMenu($id_role); ## liens vers les différentes pages et 'déconnexion'
    	finhtml() ;
    }
    else {
    	echo "<p class=\"erreur\">Erreur à l'identification</p>" ;
    	echo "<p>Retournez à la <a href=\"connexion.php\">page de connexion</a>.</p>";
    	}
     
    mysql_close() ;
    Et donc comme je disais dès que le mot de passe est modifié alors l'utilisateur est déconnecté :/

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salam ; avant de parler de la cause , je voie que la modification porte sur plusieurs champs.
    alors que la modification du mot de passe doit se faire a part comme suite:
    1. champs1 : saisie de mot de passe actuel,
    2. champs2: saisie du nouveau mot de passe,
    3. champs3: saisie de confirmation du nouveau mot de passe.

    fonctionnement:
    1. vérification si les champs ne sont pas vide...,
    2. vérification du champs1 avec le mot de passe dans $_SESSION['mp'],
    3. vérification du champs2 avec champs3,
    4. si c'est bon enregistrement du nouveau mot de passe avec un UNSET pour vider la $_SESSION['mp']; sans déconnecté l'utilisateur mais il ne peut pas changer une deuxième fois le mot de passe.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 42
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par redoran Voir le message
    salam ; avant de parler de la cause , je voie que la modification porte sur plusieurs champs.
    alors que la modification du mot de passe doit se faire a part comme suite:
    1. champs1 : saisie de mot de passe actuel,
    2. champs2: saisie du nouveau mot de passe,
    3. champs3: saisie de confirmation du nouveau mot de passe.

    fonctionnement:
    1. vérification si les champs ne sont pas vide...,
    2. vérification du champs1 avec le mot de passe dans $_SESSION['mp'],
    3. vérification du champs2 avec champs3,
    4. si c'est bon enregistrement du nouveau mot de passe avec un UNSET pour vider la $_SESSION['mp']; sans déconnecté l'utilisateur mais il ne peut pas changer une deuxième fois le mot de passe.
    Ouais l'utilisateur peut modifier plusieurs données mais dans mon traitement j'ai bien séparé ces modifications. Donc en fait après ma requête sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE utilisateur UNSET nouveau mdp
    J'essaie et je te dis si ça fonctionne

    En tout cas merci

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 227
    Points
    20 227
    Par défaut
    Pourquoi faire une connexion() au début du fichier ?
    Une connexion se fait au moment ou l'utilisateur entre ses identifiants et c'est tout. Après on reste connecté tant que la session est valide.

    A la vue de ton code j'imagine que connexion prend l'id utilisateur + le mot de passe et tente de connecter l'utilisateur. Donc du coup si le mot de passe à changer forcément il va être déconnecté car l'identification aura échouée : La condition connexionUtilisateurReussie() est pas validé.

    On ne stock pas un mot de passe en session, encore moins si il est en clair.
    Les sessions et cookies ne doivent contenir que des informations non critiques.

    Pour finir un peu de lecture sur les identifications en général :
    http://stackoverflow.com/questions/5...authentication
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 42
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par grunk Voir le message
    Pourquoi faire une connexion() au début du fichier ?
    Une connexion se fait au moment ou l'utilisateur entre ses identifiants et c'est tout. Après on reste connecté tant que la session est valide.

    A la vue de ton code j'imagine que connexion prend l'id utilisateur + le mot de passe et tente de connecter l'utilisateur. Donc du coup si le mot de passe à changer forcément il va être déconnecté car l'identification aura échouée : La condition connexionUtilisateurReussie() est pas validé.

    On ne stock pas un mot de passe en session, encore moins si il est en clair.
    Les sessions et cookies ne doivent contenir que des informations non critiques.

    Pour finir un peu de lecture sur les identifications en général :
    http://stackoverflow.com/questions/5...authentication
    La connexion() est la connexion à la base de donnée
    Ok pour les sessions je supprime tout ce qui est mot de passe et les choses gênantes
    et ouii en plus ça semblait évident faut que j'enlève la fonction connexionutilisateur réussie

    Je suis encore une novice

    Merci pour vos réponses

  9. #9
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam, grunk
    n ne stock pas un mot de passe en session, encore moins si il est en clair.
    qu'elle est ta proposition en matière de manipulation des mots de passe surtout pour la modification ?

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 227
    Points
    20 227
    Par défaut
    Citation Envoyé par redoran Voir le message
    Salam, grunk
    qu'elle est ta proposition en matière de manipulation des mots de passe surtout pour la modification ?
    Ba tu fais un simple update de ta base. Un mot de passe n'a pas besoin d'être stocké ailleurs que dans la BDD.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam (salut); grunk
    Ba tu fais un simple update de ta base. Un mot de passe n'a pas besoin d'être stocké ailleurs que dans la BDD.
    Ok , donc on fait une requête de sélection du mot de passe selon l'id ou le user ensuite en passe a la modification.
    mais avant ça , elle doit avoir un champs de saisie du mot de passe actuel , ensuite le comparé avec celui de la BDD , ensuite un champs d saisie du nouveau mot de passe et un autre champs pour la confirmation du nouveau de mot de passe.

  12. #12
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 227
    Points
    20 227
    Par défaut
    Citation Envoyé par redoran Voir le message
    Ok , donc on fait une requête de sélection du mot de passe selon l'id ou le user ensuite en passe a la modification.
    mais avant ça , elle doit avoir un champs de saisie du mot de passe actuel , ensuite le comparé avec celui de la BDD , ensuite un champs d saisie du nouveau mot de passe et un autre champs pour la confirmation du nouveau de mot de passe.
    On peut aussi considérer que si l'utilisateur à accès au changement de mot de passe c'est qu'il l'a déjà tapé avant et donc qu'on à pas besoin de lui redemandé.

    Mais effectivement en général on redemande une confirmation pour minimiser un vol de session ou un petit malin qui passe derrière quelqu'un qui n'as pas fermer sa session.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    On peut aussi considérer que si l'utilisateur à accès au changement de mot de passe c'est qu'il l'a déjà tapé avant et donc qu'on à pas besoin de lui redemandé.
    là aussi y'a le même risque non !!!

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

Discussions similaires

  1. Changer mot de passe sans connaître l'ancien
    Par luckan dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/06/2007, 19h12
  2. Comment changer le mot de passe sous Interbase
    Par ETOKA dans le forum InterBase
    Réponses: 3
    Dernier message: 05/08/2004, 11h25
  3. changer le mot de passe d'un utilisateur
    Par Rdjedidene dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2004, 13h56
  4. [VB6] [ADO] [Access] Changer le mot de passe
    Par dlpxlid dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 03/03/2003, 09h45

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