Aide formulaire connexion

touristeur92 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous ! J'ai créé un formulaire de connexion pour mon site, avec des utilisateurs ajoutés manuellement via la base de données.

Seulement après une authentification correcte le haut de chaque page que je souhaite sécuriser m'affiche des erreurs du genre :

Warning: session_start() [function.session-start]: open(/home/users/web/b859/moo.tryit/cgi-bin/tmp/sess_534d84ad5ed0ac7d61c3f5a492597e06, O_RDWR) failed: No such file or directory (2) in /hermes/web02/b859/moo.tryit/login.php on line 25

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /hermes/web02/b859/moo.tryit/login.php:1) in /hermes/web02/b859/moo.tryit/login.php on line 25

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /hermes/web02/b859/moo.tryit/login.php:1) in /hermes/web02/b859/moo.tryit/login.php on line 25
Vous etes bien logué
Warning: Unknown: open(/home/users/web/b859/moo.tryit/cgi-bin/tmp/sess_534d84ad5ed0ac7d61c3f5a492597e06, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/home/users/web/b859/moo.tryit/cgi-bin/tmp) in Unknown on line 0



Voici le code contenu dans "login.php" :

<?
$BD_serveur = "************";
$BD_utilisateur = "**********";
$BD_motDePasse = "**********";
$BD_base = "*************";
@mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
or die("Impossible de se connecter au serveur de bases de donn?.");
@mysql_select_db($BD_base)
or die("Impossible de se connecter ?a base de donn?.");

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST);
// on recupère le password de la table qui correspond au login du visiteur
$sql = "select pwd from tbl_user where login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$data = mysql_fetch_assoc($req);

if($data['pwd'] != $pass) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('login.htm'); // On inclut le formulaire d'identification
exit;
}
else {
session_start();
$_SESSION['login'] = $login;

echo 'Vous etes bien logué';
// ici vous pouvez afficher un lien pour renvoyer
// vers la page d'accueil de votre espace membres
}
}
else {
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('login.htm');
exit;
}
?>



D'où vient le problème à votre avis ?


A voir également:

7 réponses

avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Cette erreur s'affiche quand il y a du texte qui sort avant l'appel à la fonction session_start.
0
touristeur92 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Pourtant je fais bien attention de supprimer tous les espaces avant, et la page login.php est vide de tout contenu.
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Si tu es en UTF-8 vérifie qu'il n'y ai pas le caractère BOM au début.
0
touristeur92 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Je viens de ré encoder en UTF-8 sans BOM mais le même message d'erreur apparait.

Voici le code complet de la page :


<?$BD_serveur = "*******";
$BD_utilisateur = "*******";
$BD_motDePasse = "*******";
$BD_base = "*******";
@mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
or die("Impossible de se connecter au serveur de bases de donnee.");
@mysql_select_db($BD_base)
or die("Impossible de se connecter ?a base de donnees.");
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST);
$sql = "select pwd from tbl_user where login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
if($data['pwd'] != $pass) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('login.htm');
exit;
}
else {
session_start();
$_SESSION['login'] = $login;
echo 'Vous etes bien logué';
// ici vous pouvez afficher un lien pour renvoyer
// vers la page d'accueil de votre espace membres
}
}
else {
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('login.htm'); // On inclut le formulaire d'identification
exit;
}?>
0

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

Posez votre question
touristeur92 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Need help. Je sens vraiment que je suis tout proche... Seulement je ne vois vraiment pas d'où vient l'erreur. J'ai retiré les espaces hors balises PHP, encoder sans BOM,...
0
fandecarotte
 
$session_start() est trés capricieux (pour pas dire pire), il faut le mettre au début du code juste deerriére la première balise php, j'ai déjà eu des erreurs parce que j'avais un saut à la ligne entre <?php et session_start(); donc:
<?php session_start();
ou alors pas de session.
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Ça ne vient pas de ça.
Tu peux très bien faire
<?php session_start(); ?>
et
<?php
session_start();
?>
0
briiiiix Messages postés 575 Date d'inscription   Statut Membre Dernière intervention   18
 
Bonsoir tout le monde,

Pourquoi ne pas mettre session_start au début même si on n'est pas authentifié.
Je vous explique l'utilité.
Dans mes sites, j'ouvre systématiquement des sessions même pour la première connexion au site et j'initialise une variable appelée dans mon cas $_SESSION['type_utilisateur'] à la valeur 0 si elle n'est pas renvoyée par une page précedente, comme ça je suis sur que tous mes utilisateurs non authentifiés on la valeur 0.
Dès que quelqu'un s'identifie, cette valeur passe à 1, 2, 3 ou peu importe, l'essentiel c'est qu'elle m'indique le type de l'utilisateur connecté puisque dans la majorité des cas on a besoin d'affecter des privileges a des utilisateurs.
Voici un exemple de ce que je veux dire.

En cas de deconnexion je detruit toutes les autres variables sessions et je réinitialise la $_SESSION['type_utilisateur'] à 0

Pratique non ?
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Moi je ne stocke que l'id du membre dans $_SESSION['id'].
Si cette variable n'existe pas, alors il n'est pas connecté.
Et à la déconnexion, je détruit cette variable avec la fonction unset().
0
briiiiix Messages postés 575 Date d'inscription   Statut Membre Dernière intervention   18
 
Et ben tu seras toujours obligé de chercher le privilège depuis la base de données quand tu auras besoin et ceci occupera ton serveur pour ein surtout quand tu as des centaines d'utilisateurs connectés en même temps
0
avion-f16 Messages postés 19255 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
J'ai une fonction qui se charge de récupérer l'information demandée en fonction de l'id donné.
Par exemple si je veux récupérer le pseudo du membre #1 : getInfo('identifiant',1);
L'avantage c'est qu'il n'y a pas besoin de se reconnecter pour voir les changements.
0
touristeur92 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
MAJ: Ce problème est résolu, j'ai tout simplement enlevé les $session_start() et cela redirige bien vers une page d'erreur en cas de mauvais pseudo/mot de passe ou champ vide . En revanche, après une authentification correcte et une redirection vers la page souhaitée, le formulaire de connexion apparait encore et toujours, sur la nouvelle page.

La page contient le début de code suivant :

<?
/*
si la variable de session login n'existe pas cela siginifie que le visiteur
n'a pas de session ouverte, il n'est donc pas logué ni autorisé à
acceder à l'espace membres
*/
if(!isset($_SESSION['login'])) {
echo 'Vous n\'avez pas les permissions pour acceder à cette zone';
include('login.htm');
exit;
}
?>
0