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
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
A voir également:
- Page déconnexion espace membres
- Espace insécable word - Guide
- Supprimer une page word - Guide
- Comment liberer de l'espace sur gmail - Guide
- Traduire une page - Guide
12 réponses
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
2 oct. 2019 à 00:19
2 oct. 2019 à 00:19
Bonjour,
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 )
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 )
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
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 :
3- je ne comprend pas la question : je n’ai rien d’autres que
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) :
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
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
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
3 oct. 2019 à 17:32
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 :
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
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(); }
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
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)
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)
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
9 oct. 2019 à 17:13
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 :
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 ?>
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
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
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+
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+
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
11 oct. 2019 à 19:51
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
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
ou si tu veux faire une redirection, supprimer la ligne de l'include et réactiver la redirection
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 )
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 )
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
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
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
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
15 oct. 2019 à 16:09
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
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
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
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
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
17 oct. 2019 à 17:34
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
Merci
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
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 :
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...
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
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 :
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
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
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
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
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
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