Page déconnexion espace membres

Fermé
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019 - 1 oct. 2019 à 16:34
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019 - 30 oct. 2019 à 18:23
Bonjour,

J'ai une double question liée concernant mon espace membres (accédé par ID et PW).

J'ai un bouton 'disconnect' qui active une page disconnect.php avec le code suivant:
<?php
    session_start();
    session_unset();
    session_destroy();
    header('Location: ../index.php');
    exit();
    ?>

Le retour vers la page d'accueil (index.php) en cliquant sur le bouton se fait bien, mais si je clique sur la flèche retour du navigateur, je reviens dans l'espace membres sans que la déconnexion ait été effective (= sans avoir à retaper ID et PW).
Y-a-il un bug? Comment faire pour empêcher ce retour?

Par ailleurs j'aimerais que un membre ne puisse pas rester dans l'espace membres plus de 10 minutes à chaque fois, et qu'au-delà la session serait désactivée (et le membre serait renvoyé à index.php et devrait à nouveau retaper ID et PW).
Mais je n'ai pas de cookie sur le site.
Sur le net j'ai trouvé une solution passant par un .htaccess contenant le code
<?php
ini_set("session.gc_maxlifetime", '600');
>

mais il semblerait que cela ne soit pas la solution, mais un moyen de désactiver la session si le membre est inactif pendanr 10 minutes et je ne sais pas où mettre ce .htaccess, à savoir à la racine du site ou à la racine de l'espace membres.

J'ai aussi contacté mon hébergeur et la réponse est qu'il n'y a pas de déconnection automatique par le serveur après un temps x.

J'ai aussi trouvé sur Internet du code qui désactive une session (donc plus proche de mon objectif) mais je ne sais pas si cela peut marcher car pour l'accès à l'espace membres je ne passe pas par une BDD, le code contrôle si le membre a bien tapé son ID et PW et si la date terminale de son abonnement n'est pas dépassé... donc je ne sais pas si ce code s'appliquerait:

<?php 
session_start();//session_start() nous permet ici d'appeler toutes les sessions actives de l'utilisateur, enregistrées avec $_SESSION['nom_que_vous_souhaitez']
 
unset($_SESSION['pseudo']);//unset() détruit une variable, si vous enregistrez aussi l'id du membre (par exemple) vous pouvez comme avec isset(), mettre plusieurs variables séparés par une virgule:
//unset($_SESSION['pseudo'],$_SESSION['id']);
 
header("Refresh: 5; url=./");//redirection vers le formulaire de connexion dans 5 secondes
echo "Vous avez été correctement déconnecté du site.<i>Redirection en cours, vers la page d'accueil...</i>";
 ?>


la 1ère ligne de code de ma page d'accueil de l'espace membres est:
<?php include 'session_start.php'; ?>


Pourriez-vous me conseiller?

Merci, Steph



Configuration: Windows / Firefox 68.0
A voir également:

12 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
2 oct. 2019 à 00:19
Bonjour,


j'aimerais que un membre ne puisse pas rester dans l'espace membres plus de 10 minutes à chaque fois, et qu'au-delà la session serait désactivée (et le membre serait renvoyé à index.php et devrait à nouveau retaper ID et PW).

Tu stockes en SESSION la date/heure à laquelle l'utilisateur est arrivé sur la page...
Puis, en Javascript/ajax tu vas vérifier toutes les x minutes si le délai ( différence entre le temps à l'instant T mois l'heure enregistrée dans ta session ) dépasse les 10 minutes.


Pour ce qui est ton souci de session... il faudrait :
1 - Activer l'affichage des erreurs PHP sur tes pages (https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code)
2 - Comment tu démarres ta session sur ta page de login (nous montrer le code de ton fichier session_start.php )
3 - Nous montrer comment tu initialises tes variabes de session (avec quelle valeurs, sous quelle forme )
4 - Ne pas hésiter à mettre des print_r de ta variable $_SESSION sur tes pages pour voir quelles valeurs y sont présentes (à chacune des étapes )



0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
3 oct. 2019 à 16:49
Jordane, merci… tu écris :
Pour ce qui est ton souci de session... il faudrait :
1 - Activer l'affichage des erreurs PHP sur tes pages (https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code)
2 - Comment tu démarres ta session sur ta page de login (nous montrer le code de ton fichier session_start.php )
3 - Nous montrer comment tu initialises tes variables de session (avec quelle valeurs, sous quelle forme )
4 - Ne pas hésiter à mettre des print_r de ta variable $_SESSION sur tes pages pour voir quelles valeurs y sont présentes (à chacune des étapes )

Réponses :
1- c’est fait

2- voir le code ci-dessous, dans souscription.php :
<?php
session_start();

if ((isset($_POST)) && (!empty($_POST))) 
{
	 $redirect = "http://www.blabla.com/souscription.php";
	 $members_area = "http://www.blabla.com/espacemembre/accesmembres.php";
	 $error = "http://www. blabla.com/login_failed.php";
	
	 // les codes sont-ils fournis ?
	 if ((!isset($_POST["ID"])) or (!isset($_POST["password"]))) 
	 {
	
		   header('Location: $error');
		// include "$error";
		 die(""); //pour arreter le script et l'empecher d'afficher la page de partenariat
	 }
// suit le code pour vérifier validité ID/PW/date, si Ok, voici la suite du code
if ($membre==1) 
	   {
	     // identifier comme membre
	     $_SESSION["MEMBRE"]="oui";
	     $_SESSION["login"]=$nom1;
	     $_SESSION["passe"]=$passe1;
	     // sauver les infos de connexion


3- je ne comprend pas la question : je n’ai rien d’autres que
<?php include 'aaaz-session_start.php'; ?>

comme première ligne du fichier accesmembres.php

4- je comprend l’idée du print_r($mavariable) dans le code php, mais dans le code de la page de déconnexion je n’ai pas de variable (sauf erreur) :

<?php
    session_start();
    session_unset();
    session_destroy();
    header('Location: ../index.php');
    exit();
    ?>



Pour ce qui est de ta proposition avec du js, je n’ai aucune connaissance de ce langage, et en plus je me demande ce qui se passera si le membre a désactivé javascript sur son navigateur.

Enfin je voudrais rappeler que je suis encore peu expérimentée en php !
Peut-être que ce code de déconnexion ne s’applique qu’avec une BDD, ce qui n’est pas le cas (en réalité le code de souscription.php contrôle ID/PW/date dans un fichier txt avec ID(tabulation) PW(tabulation) date(tabulation)

Merci d’avance !

Steph
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
3 oct. 2019 à 17:32
Je pense que tu ne nous as pas montré les codes complets...
Par exemple.... d'où vient la variable $membre ?
et tes variables $nom1 et $passe1... elles arrivent d'où ?

Et puis... le !empty fais déjà le isset ... pas besoin d'utiliser les deux



Voici, à quoi pourrait ressembler ton code :

<?php
//--------------------------------//
//souscription.php
//--------------------------------//
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//initialisation des différentes variables
$redirect = "http://www.blabla.com/souscription.php";
$members_area = "http://www.blabla.com/espacemembre/accesmembres.php";
$error = "http://www. blabla.com/login_failed.php";

//récupération propre des variables AVANT leur utilisation:
$ID = !empty($_POST["ID"]) ? $_POST["ID"] : NULL;
$password = !empty($_POST["password"]) ? $_POST["password"] : NULL;


if(!$ID or !$password ){
  header('Location: $error');
	// include "$error";
  die(""); //pour arreter le script et l'empecher d'afficher la page de partenariat
  
} else {
    
  if ($membre==1) { // d'où vient cette variable membre ??
 
	  // identifier comme membre
	  $user["MEMBRE"]="oui";
	  $user["login"]=$nom1;
	  $user["passe"]=$passe1;
	  // sauver les infos de connexion
    $_SESSION['USER'] = $user;  
  }

}

//le temps des tests :
echo "<pre>User :<br>";
print_r($_SESSION['USER']);
echo "</pre><br>";


<?php
//--------------------------------//
//page de déconnexion
//--------------------------------//
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$_SESSION['USER'] = NULL;
unset($_SESSION['USER']);

//le temps des tests :
echo "<pre>User :<br>";
print_r($_SESSION['USER']);
echo "</pre><br>";

//header('Location: ../index.php');  // désactivation de la redirection le temps des tests pour essayer de voir où est le souci !
exit();
?>


Comme tu peux le voir j'ai un peu modifié ta variable de session.
Il est plus simple de gérer UNE variable de session contenant différentes valeurs (sous forme d'un array associatif )
Donc, dans la partie du script qui regarde si ton user est logué (script que tu ne nous as pas montré.... ) il faudra désormais se baser sur


//le temps des tests :
echo "<pre>User :<br>";
print_r($_SESSION['USER']);
echo "</pre><br>";

$login = !empty($_SESSION['USER']['login']) ? $_SESSION['USER']['login'] : NULL;


if($login){
   //l'utilisateur est bien connecté..
}else{
   //l'utilisateur n'est pas connecté
   //header('location : index.php'); // redirection vers l'index par exemple.... à modifier selon tes besoins.
   //exit();
}



0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
9 oct. 2019 à 16:38
Jordane, merci…
Hélas, je rame depuis 2 jours: c'était une grosse boulette de ne pas donner le code complet.

Voilà au point où j'en suis pour le code (complet) avec ce que j'ai (mal) "compris" de tes ajouts

1- pour le fichier souscription.php (dans la section tout public)
<?php
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

if ((isset($_POST)) && (!empty($_POST))) 
{
	 $redirect = "http://www.blabla.com/souscription.php";
	 $members_area = "http://www.blabla.com/espacemembre/accesmembres.php";
	 $error = "http://www.blabla.com/login_failed.php";
	
	 // les codes sont-ils fournis ?

//récupération propre des variables AVANT leur utilisation:
$ID = !empty($_POST["ID"]) ? $_POST["ID"] : NULL;
$password = !empty($_POST["password"]) ? $_POST["password"] : NULL;


if(!$ID or !$password) {
  header('Location: $error');
	// include "$error";
  die(""); //pour arreter le script et l'empecher d'afficher la page de partenariat
  
}

/*	 if ((!isset($_POST["ID"])) or (!isset($_POST["password"]))) 
	 {
	
		   header('Location: $error');
		// include "$error";
		 die(""); //pour arreter le script et l'empecher d'afficher la page de partenariat
	 }*/
	
	 // les mettre en variable
	 $nom1=$_POST["ID"];
	 $passe1=sha1($_POST["password"]); //crypter les mots de passe avec le même algorythme
	 //$passe = $_POST["password"];
	
	 // les codes sont-ils vides ?
	 if (($nom1=="") or ($passe1=="")) 
	 {
	   header("Location: $error");
	 } 
	 else 
	 {
	
	   // verification des codes
	   $lignes=file("memberspro.txt");
	   /* membre = 0 => non membre
	    * membre = 1 => membre
	    * il faut ensuite vérifier la validité de l'abonnement
	    */
	   $membre=0;
	   $regex="#$nom1\t$passe1#";
	   foreach ($lignes as $lgn)
	   {
	   	
 		 if(preg_match($regex,$lgn, $tab))
 		 {
			$champ = preg_split('#\t#',$lgn);
 	      	  $date = $champ[2];
 	      	  
 		      if($date!== false)
 		      {
 		      	$now = new Datetime();
 		      	$now = $now->format('Y-m-d');
 				$next = new DateTime($date);
 					if( $now < $date ) //si la date enregistrée est plus récente que la date actuelle
 					{
 						$membre=1;
 						$id_mem=$tab[1]; 
 					}
 		      }
	      	
	       
	      }// fin if(preg_match)
	    }//fin foreach
	   if ($membre==1) 
	   {
	     // identifier comme membre
	     $_SESSION["MEMBRE"]="oui";
	     $_SESSION["login"]=$nom1;
	     $_SESSION["passe"]=$passe1;
	     // sauver les infos de connexion
	     $chn=file_get_contents('visitorspro.txt');
	     $chn.="\n".$nom1."\t".$id_mem."\t".date("Y-m-d H:i:s")."\t".$_SERVER["REMOTE_ADDR"];
	     $mf=fopen('visitorspro.txt','w');
	     fwrite($mf,$chn);
	     fclose($mf);
	    
	     header("Location: $members_area");
	   } 
	   else 
	   {
		    header("Location: $error");
			include "$error";
	   }
	
	 
	}//fin else
} 
else {
	// premier appel au formulaire
	?>


là j'ai l'erreur (après avoir tapé ID et PW):
xxxxx
Notice: Undefined offset: 1 in /souscription.php on line 74

Warning: Cannot modify header information - headers already sent by (output started at /souscription.php:74) in /souscription.php on line 94
xxxxxxxx
et pour line 94, le code est:
header("Location: $members_area");
xxxxxxxxxxxxxx

j'ai bien essayé de ne pas garder (= désactiver), comme tu le demandes, le code suivant
if ((isset($_POST)) && (!empty($_POST)))
{
mais alors cela buggue!

2- pour le fichier disconnect.php (dans la section membres)
<?php
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$_SESSION['USER'] = NULL;
unset($_SESSION['USER']);

//le temps des tests :
echo "<pre>User :<br>";
print_r($_SESSION['USER']);
echo "</pre><br>";

//header('Location: ../index.php');  // désactivation de la redirection le temps des tests pour essayer de voir où est le souci !
exit();
?>


je ne comprend pas pourquoi il commence par
session_start();
alors que je suis dans la section membres

lorsque je le teste j'ai l'erreur (mais cela ne paraît pas anormal si les sessions ne sont pas reconnues):

xxxxxxxxxxxxxxxxx
User :


Notice: Undefined index: USER in /disconnect.php on line 14
xxxxxxxxxx
et pour line 14, le code est:
print_r($_SESSION['USER']);

3- pour le fichier accesmembres.php (dans la section membres) vers lequel pointe souscription.php après bons contrôles de ID, PW, date limite,

je n'ai rien changé

mais je n'ai pas du tout compris ce qu'il y avait à faire (dans souscription.php?) à la fin de ton message avec:

$login = !empty($_SESSION['USER']['login']) ? $_SESSION['USER']['login'] : NULL;


if($login){
//l'utilisateur est bien connecté..
}else{
//l'utilisateur n'est pas connecté
//header('location : index.php'); // redirection vers l'index par exemple.... à modifier selon tes besoins.
//exit();
}

Bon là je suis à bout et épuisée, mais je préfère ne pas attendre pour te répondre.

Désolée si j'ai mal compris!

Merci encore,

Steph
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
9 oct. 2019 à 17:13
Bonjour,
Il faut commencer par désactiver toutes les redirections.
(les mettre en commentaire).



Ensuite, on va y aller par étape...
ton code devrait ressembler à ceci :
<?php
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//récupération propre des variables AVANT leur utilisation:
$ID = !empty($_POST["ID"]) ? $_POST["ID"] : NULL;
$password = !empty($_POST["password"]) ? $_POST["password"] : NULL;
$redirect = "http://www.blabla.com/souscription.php";
$members_area = "http://www.blabla.com/espacemembre/accesmembres.php";
$error = "http://www.blabla.com/login_failed.php";
	
// Si le formulaire a été envoyé ...les codes sont-ils fournis ? 
if(!empty($_POST) && (!$ID || !$password) ) {
  //header('Location: $error');
  die("Vous devez remplir le login et le password."); //pour arreter le script et l'empecher d'afficher la page de partenariat  
} else {
  $passe1=sha1($password); //crypter les mots de passe avec le même algorythme ( Le Sha1 n'est plus utilsé normalement... ce n'est pas sécur ! )
   // verification des codes
  $lignes=file("memberspro.txt");
   /* membre = 0 => non membre
    * membre = 1 => membre
    * il faut ensuite vérifier la validité de l'abonnement
    */
  $membre=0;
  $regex="#$ID\t$passe1#";
  foreach ($lignes as $lgn) {
    if(preg_match($regex,$lgn, $tab)){
      $champ = preg_split('#\t#',$lgn);
      $date = !empty($champ) && count($champ)>2 ? $champ[2] : false;
        
      if($date!== false) {
        $now = new Datetime();
        $now = $now->format('Y-m-d');
        $next = new DateTime($date);
        if( $now < $date ) {//si la date enregistrée est plus récente que la date actuelle
          $membre = 1;
          $id_mem = !empty($tab[1]) ? $tab[1] : NULL; 
        }
      }
    }// fin if(preg_match)
  }//fin foreach
   
  if ($membre==1){
    // identifier comme membre
    $_SESSION["MEMBRE"]="oui";
    $_SESSION["login"]=$ID;
    $_SESSION["passe"]=$passe1;
     // sauver les infos de connexion
    $chn=file_get_contents('visitorspro.txt');
    $chn.="\n".$ID."\t".$id_mem."\t".date("Y-m-d H:i:s")."\t".$_SERVER["REMOTE_ADDR"];
    $mf=fopen('visitorspro.txt','w');
    fwrite($mf,$chn);
    fclose($mf);
    //header("Location: $members_area");
    exit("connexion OK");
  } else  {
    include "$error";
     //header("Location: $error");
     //exit;
  }
}//fin else
 
?>

0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
11 oct. 2019 à 17:35
Bonjour Jordane,

Merci! C'est vraiment sympa.
Voilà, j'ai copié-collé le code dans ma page html

Quelques remarques préalables:
1- je suis consciente que sha1 est dépassé mais je ne sais pas y toucher (actuellement le fichier memberspro.txt est placé sur le serveur internet, puis un fichier encryptage.php via Internet le transforme en remplaçant les PW par le même en sha1, puis memberspro.encrypted.txt est renommé en memberspro)

pour info voici le code de encryptage.php

if(file_exists('memberspro.txt'))
{
    $nom_fichier = 'memberspro.txt';
    $fichier = file($nom_fichier);

    $new_fichier = fopen('memberspro.encrypted.txt','w+');

    foreach($fichier as $ligne)
    {
        $tab = preg_split('#\t#',$ligne);
        fwrite($new_fichier, $tab[0]."\t".sha1($tab[1])."\t".$tab[2]);
    }
    fclose($new_fichier);
    unlink('members.txt');
}


peut-être faut-il simplement remplacer sha1:
fwrite($new_fichier, $tab[0]."\t".sha1($tab[1])."\t".$tab[2]);
par un encryptage plus sécur?

2- ma page commence par ton code, puis le code html (avec notamment
<form action="http://www.blabla.com/souscription.php" method="post">
puis le code html se termine par </html> puis à la toute fin (ligne 261)
<?php
}
?>

Si je maintiens cette accolade fermée à la fin, j'ai immédiatement une erreur qui correspond à ce code:
Parse error: syntax error, unexpected '}' in souscription.php on line 261

Si je supprime ce code de la ligne 261, j'ai 3 avertissements:

Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in www.blabla.com/souscription.php on line 63
Warning: include(www.blabla.com/login_failed.php): failed to open stream: no suitable wrapper could be found in www.blabla.com/souscription.php on line 63
Warning: include(): Failed opening 'www.blabla.com/login_failed.php' for inclusion (include_path='.;C:\php\pear') in www.blabla.com/souscription.php on line 63
lecode de laligne 63 est... juste après } else {:
include "$error";

mais comme la page s'affiche, je continue et comme demandé:

après désactivation des redirections comme ceci (OK?):
//$redirect = "http://www.blabla.com/souscription.php";
//$members_area = "http://www.blabla.com/espacemembre/accesmembres.php";
//$error = "http://www.blabla.com/login_failed.php";

et remplissage de bons ID/PW
J'ai l'erreur:
Notice: Undefined offset: 1 in /souscription.php on line 74
Warning: Cannot modify header information - headers already sent by (output started at souscription.php:74) in souscription.php on line 94

Ce qui est curieux c'est que j'ai les mêmes 2 erreurs après ID/PW si je ne désactive pas les 3 lignes de redirection et que les 2 lignes marquées 74 et 94 correspondent à de l'html pur (le 1er une balise méta, le second </head>)

Voilà, j'espère que cela t'est utlie!

A+
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
11 oct. 2019 à 19:51
Bonsoir,

Pour l'accolade... c'est normal vu qu'elle est fermée à la fin de mon code.
tu peux éventuellement retirer la mienne pour laisser la tienne.

Pour ce qui est du message d'erreur... il est clair....
Tu fais un include via ta variable $error
et cette variable a pour valeur
$error = "http://www.blabla.com/login_failed.php";

Il ne faut pas utiliser d'url pour les redirection.. mais les chemins absolus ou relatifs.
En gros, pour cette variable il suffirait de mettre
$error = "login_failed.php";

ou si tu veux faire une redirection, supprimer la ligne de l'include et réactiver la redirection
  include "$error"; //ligne à supprimer
 header("Location: $error");


Pour le reste il faudrait nous coller ton code complet (et en un seul morceau afin que l'on voit les numéros de ligne )

0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
15 oct. 2019 à 14:51
Jordane, merci je progresse (j'ai enlevé ta dernière accolade fermée et laissé la mienne en toute fin de page html et j'ai corrigé les chemins en enlevant http://www.blabla.com).

Ah alors si après avoir mis les fichiers sur Internet:
- je laisse les 2 premières redirections actives et que je tape ID et PW j'ai bien le message PHP 'connexion OK'
- je désactive les 2 premières redirections et que je tape ID et PW j'ai encore le message PHP 'connexion OK'
- je désactive les 2 premières redirections et que je tape ID et un faux PW je suis redirigée sur souscription.php

Et c'est pareil en intranet, sur localhost.

Si je désactive //exit("connexion OK"); et que je réactive header("Location: $members_area");
tout marche!
(et si je réactive la 3ème redirection et que je tape ID et un faux PW je suis redirigée sur login_failed.php... c'est bon)

Juste un truc curieux, dans les 4 cas précédents avant d'afficher la page souscription.php j'ai, pendant une courte fraction de seconde, la page de login_failed.php qui s'affiche!


Pour disconnect.php, une fois dans l'espace membre, en Intranet, si je clique sur le bouton, j'ai:
User :
( ! ) Notice: Undefined index: USER in D:\_disconnect.php on line 14
la ligne 14 est :
print_r($_SESSION['USER']);

Si je désactive la ligne 14 et que je réactive:
header('Location: ../index.php');
cela semble marcher y compris sur Internet, mais, comme avant, la déconnexion ne se fait pas vraiment (je peux revenir en arrière avec le navigateur).

Enfin question subsidiaire (... je devrai sans doute ouvrir un nouveau fil, si oui, pas de souci je ferai!) pour le transit de sha1 en copiant-collant password_hash à la même place dans le code, il n'y a pas d'erreur mais dans le fichier généré (encrypted.txt) le PW est remplacé par rien du tout, donc ce n'est pas si simple)... j'ai regardé la fonction password_hash de PHP (je suis bien en PHP 7), ils disent
password_hash ( string $password , int $algo [, array $options ] ) : string
mais je ne sais pas l'adapter correctement à mon code qui est:
fwrite($new_fichier, $tab[0]."\t".sha1($tab[1])."\t".$tab[2]);
comme copié collé en:
fwrite($new_fichier, $tab[0]."\t".password_hash($tab[1])."\t".$tab[2]);

A+

Steph
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
15 oct. 2019 à 16:09

Pour disconnect.php, une fois dans l'espace membre, en Intranet, si je clique sur le bouton, j'ai:
User :
( ! ) Notice: Undefined index: USER in D:\_disconnect.php on line 14

Normal vu qu'on fait un unset($_SESSION['USER']);


la déconnexion ne se fait pas vraiment (je peux revenir en arrière avec le navigateur).

Vérifies tu, sur chacune de tes pages, que la variable $_SESSION['USER'] existe et n'est pas vide ? car c'est elle qui te permet de savoir si tu es connecté ou non....
Il manque, selon moi, au début de ta page un truc du genre
// si le formulaire n'a pas été envoyé et que la variable de session est vide...
if(empty($_POST) && empty($_SESSION['USER'])){
  header('location : souscription.php');
  exit;
}




Pour ce qui est du password_hash, il faut préciser le mode à utiliser
password_hash($tab[1],PASSWORD_DEFAULT)

https://www.php.net/manual/fr/function.password-hash.php
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
17 oct. 2019 à 16:01
Bonjour Jordane,

Toujours merci pour l'aide!

Je travaille pas mal et méthodiquement mais cela n'avance pas bien.
Je crois que je n'arrive pas à comprendre ta phrase "Vérifies tu (comment?), sur chacune de tes pages (lesquelles?), que la variable $_SESSION['USER'] existe et n'est pas vide ? car c'est elle qui te permet de savoir si tu es connecté ou non."

En ce qui concerne le problème de disconnect.php en repeignant mon code j'ai compris pourquoi tu continuais à écrire qu'il manquait du code.

En fait (c'est vieux, je ne m'en souvenais pas) il y a le code oublié de :
session_start.php
qui est appelé au début du code de la page d'accueil de l'espace membre (seulement, pas les autres pages) par <?php include 'session_start.php'; ?>
et qui est tout simple...
<?php

?>

comme je ne savais pas où mettre ton code après // si le formulaire n'a pas été envoyé et que la variable de session est vide...
je l'ai inclus dans session_start.php
<?php
if(empty($_POST) && empty($_SESSION['USER'])){
header('location : ../index.php');
exit;
// si le formulaire n'a pas été envoyé et que la variable de session est vide...
}
?>

mais là j'ai l'erreur suivante
Error 500 - Internal server error

Bon comme le ridicule ne tue pas, j'ai essayé aussi de mettre ce fameux code :
if(empty($_POST) && empty($_SESSION['USER'])){
header('location : ../index.php');
exit;

au début de souscription.php, mais cela ne marche pas davantage.

Bon je me suis arrêtée là car je risque de tout mélanger... mais je crois que mes tentatives maladroites vont quand même t'aider.

en ce qui concerne le point du hachage, c'est sans doute plus simple.
J'ai bien fait les corrections et le fichier généré contient le PW haché avec un procédé sécur (avec : IDtabulationPWhachésecurtabulationdatefinale).
Je teste en ligne... et c'est refusé et considéré comme un PW erroné ! login_failed.php
Par sécurité je reviens au PW haché en sha1 et cela remarche!
Donc il doit y a avoir quelque chose d'autre à changer... et je trouve que dans le code souscription.php il y a ligne 23
$passe1=sha1($password);
Donc je le remplace par (la doc php n'est pas claire pour moi, désolée):
$passe1=password_hash($password);
puis par
$passe1=password_hash(PASSWORD_DEFAULT)($password);

mais j'ai l'erreur suivante pour le 1er cas
Warning: password_hash() expects at least 2 parameters, 1 given in /souscription.php on line 23

Warning: Cannot modify header information - headers already sent by (output started at /souscription.php:23) in /souscription.php on line 60
header("Location: $members_area");

pareil dans le 2ème cas avec en plus:

Fatal error: Uncaught Error: Function name must be a string in /souscription.php:23 Stack trace: #0 {main} thrown in /souscription.php on line 23

A+ , en attendant tes corrections (modestement!)

Steph
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
17 oct. 2019 à 17:34
je ne répondrai que lorsque tu utiliseras les balises de code pour poster tes codes sur le forum.
Merci
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
Modifié le 25 oct. 2019 à 16:30
Bonjour Jordane,

Désolée... j'étais pressée avec les préparatifs des vacances scolaires.
Voici le texte balisé, en espérant que c'est bon maintenant:

Toujours merci pour l'aide!

Je travaille pas mal et méthodiquement mais cela n'avance pas bien.
Je crois que je n'arrive pas à comprendre ta phrase "Vérifies tu (comment?), sur chacune de tes pages (lesquelles?), que la variable $_SESSION['USER'] existe et n'est pas vide ? car c'est elle qui te permet de savoir si tu es connecté ou non."

En ce qui concerne le problème de disconnect.php en repeignant mon code j'ai compris pourquoi tu continuais à écrire qu'il manquait du code.

En fait (c'est vieux, je ne m'en souvenais pas) il y a le code oublié de :

session_start.php

qui est appelé au début du code de la page d'accueil de l'espace membre (seulement, pas les autres pages) par <?php include 'session_start.php'; ?>
et qui est tout simple...

<?php

?>


comme je ne savais pas où mettre ton code après // si le formulaire n'a pas été envoyé et que la variable de session est vide...
je l'ai inclus dans session_start.php

<?php
if(empty($_POST) && empty($_SESSION['USER'])){
header('location : ../index.php');
exit;
// si le formulaire n'a pas été envoyé et que la variable de session est vide...
}
?>


mais là j'ai l'erreur suivante
Error 500 - Internal server error

Bon comme le ridicule ne tue pas, j'ai essayé aussi de mettre ce fameux code :
if(empty($_POST) && empty($_SESSION['USER'])){
header('location : ../index.php');
exit;


au début de souscription.php, mais cela ne marche pas davantage.

Bon je me suis arrêtée là car je risque de tout mélanger... mais je crois que mes tentatives maladroites vont quand même t'aider.

en ce qui concerne le point du hachage, c'est sans doute plus simple.
J'ai bien fait les corrections et le fichier généré contient le PW haché avec un procédé sécur (avec : IDtabulationPWhachésecurtabulationdatefinale).
Je teste en ligne... et c'est refusé et considéré comme un PW erroné ! login_failed.php
Par sécurité je reviens au PW haché en sha1 et cela remarche!
Donc il doit y a avoir quelque chose d'autre à changer... et je trouve que dans le code souscription.php il y a ligne 23
$passe1=sha1($password);

Donc je le remplace par (la doc php n'est pas claire pour moi, désolée):
$passe1=password_hash($password);
puis par
$passe1=password_hash(PASSWORD_DEFAULT)($password);

mais j'ai l'erreur suivante pour le 1er cas
Warning: password_hash() expects at least 2 parameters, 1 given in /souscription.php on line 23

Warning: Cannot modify header information - headers already sent by (output started at /souscription.php:23) in /souscription.php on line 60
header("Location: $members_area");

pareil dans le 2ème cas avec en plus:

Fatal error: Uncaught Error: Function name must be a string in /souscription.php:23 Stack trace: #0 {main} thrown in /souscription.php on line 23

A+ , en attendant tes corrections (modestement!)

Steph
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
30 oct. 2019 à 18:23
Bonjour,

Et maintenant qu'est-ce que je fais Jordane?
Tout s'arrête et c'est un gâchis de temps pour tout le monde?
Ou bien il faut attendre la participation de quelqu'un d'autre du forum?

S'il te plait, dis-moi simplement.

Merci d'avance

Cordialement, Steph
0