8768 sujets

Développement web côté serveur, CMS

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 :
 <?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 :
<?php
    session_start();
    print_r("TEST2");
    print_r($_SESSION);
    include 'entete.php';
	ecrire_log(email.$_SESSION['email']);
    ecrire_log(pwd.$_SESSION['password']);
?>


index.php :
<!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 Smiley smile
Tu n'a aucune erreur php ?

Tu peux utiliser ce code sur chaque début de page :

<?php
if(!isset($_SESSION))
	session_start();


Vérifie aussi que dans ta configuration php.ini que tes sessions démarrent bien et autorisent les cookies :

session.auto_start = 1
session.use_cookies = 1


Il y aussi session.cookie_secure qui peut poser problème, tu peux le désactiver dans php.ini ou dans PHP, essaie dans PHP peut être

<?php
ini_set('session.cookie_secure', '0')


Sinon y'a la doc : http://fr.php.net/manual/fr/session.configuration.php
Modifié par Le_Panda (25 Feb 2019 - 02:54)
à titre d'infos,

le arrobas est pratique. Si la session n'est pas start alors il le fait

@session_start();
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)
j'ai rajouter les @ et ou isset .. et session.cookie_secure ça ne fonctionne toujours pas.

recup_infos copie :
 <?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 :

<?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 :

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 :
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 :
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 :

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 !
Modifié par scary02 (25 Feb 2019 - 20:30)
Solution trouver sur un autre forum :
la solution :

à la toute première ligne ... :

<?php if( empty(session_id()) ){ session_start(); } ?>

Modifié par scary02 (26 Feb 2019 - 18:16)
Meilleure solution