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 :

session


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut session
    Bonsoir,

    Je tente d'utiliser la fonction session_start();. Malheureusement, j'ai un problème quand je change de page et que j'essaie de récupérer les informations dans mon $_SESSION il est vide. Je test depuis 1&1 la base de donnée aussi.

    recup_infos.php :
    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
    123
    124
    125
    126
    127
    128
     <?php
    	include 'entete.php';
    /*------------------------------------connexion bdd----------------------------------------------------*/
    	$host_name = "xxx";
    	$database = "xxx";
    	$user_name = "xxx";
    	$password_base = "xxx";
     
    	$bdd = mysqli_connect($host_name, $user_name, $password_base, $database, 3306);
    	$db_selected = mysqli_select_db($bdd, $database);
     
    	if (mysqli_connect_errno())
    		ecrire_log( "Failed to connect to MySQL: " . mysqli_connect_error());
     
    /*------------------------------------fin connexion bdd------------------------------------------------*/
     
    /*----------------------------------------init variable super - global---------------------------------*/
     
    	/**************mode connexion**********************/
    	$email_connect = $_POST["email_connect"];
    	$password_connect = $_POST["password_connect"];
    	/**************fin mode connexion******************/
     
    	/*if (isset($_POST["log_out_submit"]))
    	{
    		ecrire_log('User submit log out');
    		session_destroy();
    		echo "<script type='text/javascript'>document.location.replace('index.php');</script>";
    	}*/
    	if (isset($_POST["email_connect"], $_POST["password_connect"]))
    	{
    		ecrire_log('the user tries to connect to it');
    		if ($result = mysqli_query($bdd, "SELECT password FROM t_user WHERE email = '$email_connect'"))
    			{
    				$rep = mysqli_fetch_assoc($result);
    				$_password = $rep['password'];
    				if (password_verify($password_connect, $_password))
    				{
    					session_start();
    					$_SESSION['email'] = $email_connect;
    					$_SESSION['password'] = $_password;
    					print_r("SESSION:");
    					print_r($_SESSION);
    					print("POST:");
    					print_r($_POST);
    					ecrire_log($_SESSION['email']);
    					ecrire_log('Email and Password match. User is connected');
    					echo "<script type='text/javascript'>document.location.replace('profile.php');</script>";
    				}
    				else
    				{
    					echo "<script type='text/javascript'>document.location.replace('index.php');</script>";
    					ecrire_log('Email and Password no match. User is no connected');
    				}
    			}
    		else
    			{
    				echo "<script type='text/javascript'>document.location.replace('index.php');</script>";
    			}
    	}
    	elseif ($result = mysqli_query($bdd, "INSERT INTO t_user(nom, prenom, age, password, email) VALUE ('$nom', '$prenom', '$age', '$mdphasher', '$email')"))
    		{
    			/**************mode inscription********************/
    			$nom =  $_POST["nom"];
    			$prenom = $_POST["prenom"];
    			$age = $_POST["age"];
    			$password = $_POST["password"];
    			$email = $_POST["email"];
    			$mdphasher = password_hash($password, PASSWORD_DEFAULT);
    			/**********fin mode inscription********************/
     
    			mysqli_free_result($result);
    			/*-----------------------Envoi du mail de confirmation d'incription----------------------------------*/
    					$mail = $email; // Déclaration de l'adresse de destination.
    					if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
    						$passage_ligne = "\r\n";
    					else
    						$passage_ligne = "\n";
    					//=====Déclaration des messages au format texte et au format HTML.
    					$message_txt = "Bonjour, $nom $prenom \n voici l'e-mail de confirmation d'inscription.";
    					$message_html = "<html><head></head><body>Bonjour, $nom $prenom \n voici l'e-mail de confirmation.</body></html>";
    					//==========
     
    					//=====Création de la boundary
    					$boundary = "-----=".md5(rand());
    					//==========
     
    					//=====Définition du sujet.
    					$sujet = "Email de confirmation d'inscription";
    					//=========
     
    					//=====Création du header de l'e-mail.
    					$header = "From: \"xx\"<xxx>".$passage_ligne;
    					$header.= "Reply-to: \"xx\" <xxx>".$passage_ligne;
    					$header.= "MIME-Version: 1.0".$passage_ligne;
    					$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
    					//==========
     
    					//=====Création du message.
    					$message = $passage_ligne."--".$boundary.$passage_ligne;
    					//=====Ajout du message au format texte.
    					$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
    					$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    					$message.= $passage_ligne.$message_txt.$passage_ligne;
    					//==========
    					$message.= $passage_ligne."--".$boundary.$passage_ligne;
    					//=====Ajout du message au format HTML
    					$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
    					$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    					$message.= $passage_ligne.$message_html.$passage_ligne;
    					//==========
    					$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
    					$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
    					//==========
     
    					//=====Envoi de l'e-mail.
    					mail($mail,$sujet,$message,$header);
    					//==========
    			/*-------------------FIN Envoi du mail de confirmation d'incription----------------------------------*/
    			echo "<script type='text/javascript'>document.location.replace('index.php');</script>";
    		}
    	else
    	{
    		ecrire_log('impossible to insert in the existing email database');
    		echo "<script type='text/javascript'>document.location.replace('index.php');</script>";
    	}
    	mysqli_close($result);
    ?>

    Profile.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
        session_start();
        print_r("TEST2");
        print_r($_SESSION);
        include 'entete.php';
    	ecrire_log(email.$_SESSION['email']);
        ecrire_log(pwd.$_SESSION['password']);
    ?>
    index.php :
    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
    <!DOCTYPE html>
    <html>
        <?php include("entete.php"); ?>
      <body>
        <div class="container">
          <?php include("menus.php"); ?>
        </div>
              <div class="row">
                <div class="banniere"></div>
              </div>
            <div class="container">
              <div class="row">
                <div class="col-lg-12 col-md-12 col-xs-12" >
                  <p style="margin-top: 2%;">
                    Bienvenue sur un site.
    							 </p>
            </div>
          </div>
    	  </div>
        <div class="container">
           <div class="row">
    					<div class="col-lg-6 col-md-6 col-xs-12">
    					<h1>Inscription</h1>
    					<p>Veuillez vous inscrire :</p>
    					<form method="post"name="inscription dans la base de donnée" action="recup_infos.php">
    						Nom: <input type="text" required="*" name="nom" /><br />
    						Prenom: <input type="text" required="*" name="prenom" /><br />
    						Email: <input type="email" required="*" name="email" /><br />
    						Age: <input type="number" required="*" min="1" max="105" name="age" /><br />
    						Password: <input type="password" required="*" name="password" />
    						<input type="submit" value="OK" />
    					</form> 
    					</div>
    					<div class="col-lg-6 col-md-6 col-xs-12">
    					<h1>Connexion</h1>
    					<p>Veuillez vous connecter :</p>
    					<form method="post"name="inscription dans la base de donnée" action="recup_infos.php">
    						Email: <input type="text" required="*" name="email_connect" /><br />
    						Password: <input type="password" required="*" name="password_connect" />
    						<input type="submit" value="OK" />
    					</form> 
    					</div>
    			</div></div>
        <?php include("pieddepage.php"); ?>
      </body>
    </html>


    résultat de profile.php : TEST2Array ( ) le tableau est vide ...


    Merci

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    ton code n'est pas du tout sécurisé et tu as codé un poil à l'envers
    à ce stade tu n'as absolument aucune assurance que les clés de ton tableau $_POST existent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $email_connect = $_POST["email_connect"];
    $password_connect = $_POST["password_connect"];
    puis quelques lignes après tu testes l'existence de ces valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST["email_connect"], $_POST["password_connect"]))
    inverse ton code.
    ensuite tu dois vérifier le paramétrage du serveur avec :
    tu dois voir quelque chose dans ce genre
    Nom : 2019-02-25_134359.jpg
Affichages : 72
Taille : 45,9 Ko
    ensuite, vérifie si ton navigateur accepte les cookies (le cookie de session (contenant l'id de la session) est nécessaire pour un fonctionnement "out of the box")

  3. #3
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Bonjour, merci pour vos réponse.
    J'ai donc re-formater tous mon code pour avoir le minimum de code.
    J'ai fais un phpinfos() (voir img)

    recup_infos copie :
    Code php : 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
     <?php
    	if(!isset($_SESSION))
    		@session_start();
    	ini_set('session.cookie_secure', '0');
    /*------------------------------------connexion bdd----------------------------------------------------*/
    	$host_name = "xx.xx-x";
    	$database = "xx";
    	$user_name = "xxx";
    	$password_base = "xxxx";
     
    	$bdd = mysqli_connect($host_name, $user_name, $password_base, $database);
    	$db_selected = mysqli_select_db($bdd, $database);
     
    	$email_connect = $_POST["email_connect"];
    	$password_connect = $_POST["password_connect"];
     
    	if (isset($email_connect, $password_connect))
    	{
    		if ($result = mysqli_query($bdd, "SELECT password FROM t_user WHERE email = '$email_connect'"))
    			{
    				$rep = mysqli_fetch_assoc($result);
    				$_password = $rep['password'];
    				if (password_verify($password_connect, $_password))
    				{
    					$_SESSION['password'] = $_password;
    					$_SESSION['email'] = $_POST["email_connect"];
    					var_dump($_SESSION);
    					echo "<script type='text/javascript'>document.location.replace('profile copie.php');</script>";
    				}
    			}
    	}
    ?>


    profile copie :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
        if(!isset($_SESSION))
            @session_start();
        var_dump($_SESSION);
    ?>

    le var_dump() dans le fichier recup_infos lui est bien rempli cependant le var_dump() dans dans le fichier profile et vide .

    img: https://www.casimages.com/i/190225080601184045.png.html



    Quand je fait un F12 dans mon fichier profile copie j'ai un avertissement je sais pas si cela a un rapport :

    https://www.casimages.com/i/190225081834251975.png.html

    J'ai fiddler sur mon pc il me renvoie :

    la demande :
    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
     
    POST http://xxxxx/recup_infos%20copie.php HTTP/1.1
    Host: xxx
    Connection: keep-alive
    Content-Length: 58
    Cache-Control: max-age=0
    Origin: xxxx
    Upgrade-Insecure-Requests: 1
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Referer: http://xxx/index.php
    Accept-Encoding: gzip, deflate
    Accept-Language: en-US,en;q=0.9,fr;q=0.8
    Cookie: PHPSESSID=c7feb177d079bb5638cbe2ecc06cc142
     
    email_connect=xxxx%40gmail.com&password_connect=aaa
    la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HTTP/1.1 200 OK
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Keep-Alive: timeout=15
    Date: Mon, 25 Feb 2019 19:23:34 GMT
    Server: Apache
    X-Powered-By: PHP/7.2.15
    Content-Encoding: gzip
    Content-Length: 88
     
     <script type='text/javascript'>document.location.replace('profile copie.php');</script>

    la seconde demande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    GET http://xxxxx.fr/profile%20copie.php HTTP/1.1
    Host: xxx
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Referer: http://xxxxx.fr/recup_infos%20copie.php
    Accept-Encoding: gzip, deflate
    Accept-Language: en-US,en;q=0.9,fr;q=0.8
    Cookie: PHPSESSID=c7feb177d079bb5638cbe2ecc06cc142

    la seconde réponse :
    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
     
    HTTP/1.1 200 OK
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Keep-Alive: timeout=15
    Date: Mon, 25 Feb 2019 19:23:34 GMT
    Server: Apache
    X-Powered-By: PHP/7.2.15
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate
    Pragma: no-cache
    Content-Encoding: gzip
    Content-Length: 14
     
    array(0) {
    }
    Je ne comprend pas du tous ce qui se passe ... Merci à vous !

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    ok, tu as le même id de session qui est envoyé.
    vérifie dans le dossier des sessions de ton serveur ce qui se passe. Tu dois trouver trace des données de session dans un fichier.
    Vu l'alerte, tu n'aurais pas des appels js plus ou moins intempestifs avec une de tes lib ? Trace les requêtes envoyées par le navigateur.
    Si t'utilise un IDE, pense à installer le module de débogage qui te permettra d'exécuter ton code pas à pas et vérifier ainsi ce qui se passe et voir par où passe le code.

  5. #5
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je suis sur mac j'utilise visual code.. je ne sais pas vraiment quel IDE utiliser et je ne crois pas avoir de mode débogage sur celui que j'utilise.
    Je ne comprend pas le dossier de session ? quand je suis sur mon accès ftp je n'ai aucun dossier mise à part les miens.
    J'ai tracé via fiddler.. je n'ai que 2 requette envoyer celle citer dans mon précédent post.

    Merci,

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- SUPPRIME TOUS les session_destroy();.

    Pour effacer une variable de SESSION, on utilise unset( $_SESSION['machin'];.

    On peut aussi effacer le contenu complet mis en SESSION avec unset( $_SESSION );.
    A éviter, si on a mis des données de config (par exemple) en SESSION (elles seraient elles aussi effacées).

    2- Pour info, une variable de SESSION peut être un array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION['user']['id']
    $_SESSION['user']['pseudo']
    $_SESSION['user']['statut']
    Idem : on peut tout effacer avec unset( $_SESSION['user'];.

    3- On ne met pas @session_start();

    On met SUR LA TOUTE PREMIERE LIGNE du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php if( empty(session_id()) ){ session_start(); } ?>
    Ainsi, si la session est déjà ouverte, no problemo.

  7. #7
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Merciiiii !!!! ça marche

    la solution :

    à la toute première ligne ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php if( empty(session_id()) ){ session_start(); } ?>

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

Discussions similaires

  1. [Servlets - JSP] Problème de session
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/11/2011, 10h54
  2. [JSP][session] perte de session et sendRedirect
    Par blaz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/03/2007, 10h32
  3. Réponses: 12
    Dernier message: 24/09/2003, 16h26
  4. [XMLRAD] session
    Par jml dans le forum XMLRAD
    Réponses: 4
    Dernier message: 17/12/2002, 10h24

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