Problème sur les sessions

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 09:05

Bonjour à tous, j'ai un problème avec les sessions lors de l'authentification:

Voici ma page qui traite les données quand quelqu'un essaye de se connecter:
<?php
// pensez a ouvrir une connexion vers mysql ici
include('chien.php');

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

  $data = mysql_fetch_assoc($req);

  if($data['password'] != $password) {
    include('erreur.html'); // On inclut le formulaire d'identification
    exit;
  }
  else {
    
    $_SESSION['pseudo'] = $_POST['pseudo'];// si pb, essayer de remplace 'pseudo' par
//'login' ;)

    echo 'Vous etes bien logué <br/><br/>';
  echo'Vous rendre sur la page <a href="acceuil.html"> principale </a>';  // ici vous pouvez afficher un lien pour renvoyer
    // vers la page d'accueil de votre espace membres
  }
}
else {
   include('erreur2.html'); // On inclut le formulaire d'identification
   exit;
}
?>
Maintenant, je ne sais pas quoi mettre pour que les personnes non-connectées ne puissent accéder à mes autres pages.
Si quelqu'un à une réponse, merci :)

Mammouth du PHP | 1353 Messages

21 juin 2006, 09:09

Dans cette page tu initialises une variable de session pseudo.

Il te suffit par exemple de créer un fichier entete.php qui contiendrai uniquement la verification de la variable pseudo. Si elle est vide ou indéfinie, l utilisateur est renvoyé sur ta page de log in ou d acceuil...
session_start();
if(!isset($_SESSION['pseudo']) || empty($_SESSION['pseudo']))
header("Location: index.php");
Ensuite il te suffit de faire un include de cette page au début des autres pages...
Modifié en dernier par guilt92 le 21 juin 2006, 09:11, modifié 2 fois.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 536 Messages

21 juin 2006, 09:09

moi j'essairai avec ca a chaque début de page que tu veux protéger. Attention, il ne doit pas avoir d'autre lignes de php avant:
<?php session_start(); 
if (!isset($_SESSION['nom'])) { 
    header ('Location: autrepage.php'); 
    exit(); 
} 
?>
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 10:07

Merci à vous, j'essayerai les 2 méthodes :)

Mammouth du PHP | 1353 Messages

21 juin 2006, 10:29

j'essayerai les 2 méthodes
Nous t'avons proposé la meme chose mais formulé differemment ;)

Le concept reste de tester au début de chaque page si la variable de session est définie, et si ca n est pas le cas de faire une redirection.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 10:38

La première méthode marche pas:
j'essaye d'aller sur la page sans être connecté, ça y va quand même; peut est-ce un problème de mon pc:
si quelqu'un veut vérifier, peut-il aller sur:
http://dededick.free.fr/acceuil.html

Merci

Mammouth du PHP | 1353 Messages

21 juin 2006, 10:46

fais voir le code STP. N oublie pas que le session_start() doit etre la premiere ligne de ton code, soit via un include soit directement mais il faut que ca soit en premier...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 10:50

<!-- Ouvrir une session pour pas que les non-connectés accèdent à cette page !-->
<?php session_start();
if (!isset($_SESSION['pseudo'])) {
    header ('Location: index.html');
    exit();
}
?>

<html>
<head>
<title> Bienvenue sur Poudlard2006 </title>
<meta http-equiv="content-language" content="fr">
 <link rel="stylesheet" media="screen" type="text/css" title="Essai" href="color.css" />

<SCRIPT LANGUAGE="JavaScript">
// a mettre entre <head> et <head/>
var max=0;
function textlist() {
max=textlist.arguments.length;
for (i=0; i<max; i++)
this[i]=textlist.arguments[i];
}
tl = new textlist(
"Bievenue sur ce site.",
"En cas de problème, un forum est à votre disposition.",
"Petites annonces:",
"Aujourd'hui, le cerveau a des capacités tellement étonnantes, que presque tout le monde en a un.",
"Un verre est à moitié plein d'eau; n'est-il pas plutôt à moitié vide?",
"Il semblerait que... mais on n'en est pas sur...",
"Vous pensez ne rien savoir? Mais rassurez-vous, vous savez au moins ça!"
);

var x = 0; pos = 0;
var l = tl[0].length;
function textticker() {
document.tickform.tickfield.value = tl[x].substring(0, pos) + "_";
if(pos++ == l) {
pos = 0;
setTimeout("textticker()", 2000);
if(++x == max) x = 0;
l = tl[x].length;
} else
setTimeout("textticker()", 50);
}
</script>
</head>
<BODY OnLoad="textticker()">

<center>
<form name=tickform>
<textarea name=tickfield rows=3 cols=38 style="background-color: rgb(0,0,0); color: rgb(255,255,255); cursor: default; font-family: Arial; font-size: 12px" wrap=virtual>Les infos apparaissent ici, une fois que la page est chargée.</textarea>
</form>
</center>
</script>



   </head>
   <script language="JavaScript">
function nextSize(i,incMethod,textLength){
  if (incMethod == 1) return (40*Math.abs( Math.sin(i/(textLength/3.14))) );
  if (incMethod == 2) return (255*Math.abs( Math.cos(i/(textLength/3.14))));
}

function sizeCycle(text,method,dis){   
  output = "";
  for (i = 0; i < text.length; i++){
    size = parseInt(nextSize(i +dis,method,text.length));
    output += "<font style='font-size: "+ size +"pt'>" +text.substring(i,i+1)+ "</font>";
  }
  theDiv.innerHTML = output;
}

function doWave(n){
  theText = "dededick.free.fr";
  sizeCycle(theText,1,n);       
  if (n > theText.length) {n=0}
  setTimeout("doWave(" + (n+1) + ")", 150);
}
</script>
<body>
<div id="en_tete">
<!-- Mettre la bannière -->
</div>
<div id="menu">
<div id="element_menu">
<ul id="lien2">
<li><a href="acceuil.html"> Arrivée à Poudlard2006 </a></li>
<li><a href="http://poudlard2006.goodforum.net"> La Grande Salle </a></li>
C'est la page d'acceuil...

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 10:58

<!-- Ouvrir une session pour pas que les non-connectés accèdent à cette page !-->
<?php session_start();
if (!isset($_SESSION['pseudo'])) {
    header ('Location: index.html');
    exit();
}
?>

<html>
<head>
<title> Bienvenue sur Poudlard2006 </title>
<meta http-equiv="content-language" content="fr">
 <link rel="stylesheet" media="screen" type="text/css" title="Essai" href="color.css" />

<SCRIPT LANGUAGE="JavaScript">
// a mettre entre <head> et <head/>
var max=0;
function textlist() {
max=textlist.arguments.length;
for (i=0; i<max; i++)
this[i]=textlist.arguments[i];
}
tl = new textlist(
"Bievenue sur ce site.",
"En cas de problème, un forum est à votre disposition.",
"Petites annonces:",
"Aujourd'hui, le cerveau a des capacités tellement étonnantes, que presque tout le monde en a un.",
"Un verre est à moitié plein d'eau; n'est-il pas plutôt à moitié vide?",
"Il semblerait que... mais on n'en est pas sur...",
"Vous pensez ne rien savoir? Mais rassurez-vous, vous savez au moins ça!"
);

var x = 0; pos = 0;
var l = tl[0].length;
function textticker() {
document.tickform.tickfield.value = tl[x].substring(0, pos) + "_";
if(pos++ == l) {
pos = 0;
setTimeout("textticker()", 2000);
if(++x == max) x = 0;
l = tl[x].length;
} else
setTimeout("textticker()", 50);
}
</script>
</head>
<BODY OnLoad="textticker()">

<center>
<form name=tickform>
<textarea name=tickfield rows=3 cols=38 style="background-color: rgb(0,0,0); color: rgb(255,255,255); cursor: default; font-family: Arial; font-size: 12px" wrap=virtual>Les infos apparaissent ici, une fois que la page est chargée.</textarea>
</form>
</center>
</script>



   </head>
   <script language="JavaScript">
function nextSize(i,incMethod,textLength){
  if (incMethod == 1) return (40*Math.abs( Math.sin(i/(textLength/3.14))) );
  if (incMethod == 2) return (255*Math.abs( Math.cos(i/(textLength/3.14))));
}

function sizeCycle(text,method,dis){   
  output = "";
  for (i = 0; i < text.length; i++){
    size = parseInt(nextSize(i +dis,method,text.length));
    output += "<font style='font-size: "+ size +"pt'>" +text.substring(i,i+1)+ "</font>";
  }
  theDiv.innerHTML = output;
}

function doWave(n){
  theText = "dededick.free.fr";
  sizeCycle(theText,1,n);       
  if (n > theText.length) {n=0}
  setTimeout("doWave(" + (n+1) + ")", 150);
}
</script>
<body>
<div id="en_tete">
<!-- Mettre la bannière -->
</div>
<div id="menu">
<div id="element_menu">
<ul id="lien2">
<li><a href="acceuil.html"> Arrivée à Poudlard2006 </a></li>
<li><a href="http://poudlard2006.goodforum.net"> La Grande Salle </a></li>
C'est la page d'acceuil...
Et ce qu'il me dit c'est:

Code : Tout sélectionner

Warning: session_start() [function.session-start]: open(/mnt/112/sdb/4/d/dededick/sessions/sess_d7b9ae6910d58209d7b85e8f2236e7a9, O_RDWR) failed: No such file or directory (2) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 2 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:2) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 2 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:2) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 2 Warning: Cannot modify header information - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:2) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 4 Warning: Unknown(): open(/mnt/112/sdb/4/d/dededick/sessions/sess_d7b9ae6910d58209d7b85e8f2236e7a9, 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 (/mnt/112/sdb/4/d/dededick/sessions) in Unknown on line 0
[/code]

Mammouth du PHP | 1353 Messages

21 juin 2006, 10:59

déjà avant que je regarde la suite enlève les commentaires avant le session_start

On a précisé que ca doit etre la 1ere ligne et c vraiment le cas, les commentaires html ne passeront pas si tu les mets avant.

Tu peux par contre les mettre en php si tu veux commenter :
<?php
//Ouvrir une session pour pas que les non-connectés accèdent à cette page 
session_start(); 
if (!isset($_SESSION['pseudo'])) { 
    header ('Location: index.html'); 
    exit(); 
} 
?>
Tell me and I forget. Teach me and I remember. Involve me and I learn.

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 11:01

le message qu'il me renvoie:

Code : Tout sélectionner

Warning: session_start() [function.session-start]: open(/mnt/112/sdb/4/d/dededick/sessions/sess_4a6b842cec07002a9123e47f1facd96c, O_RDWR) failed: No such file or directory (2) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: Cannot modify header information - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 4 Warning: Unknown(): open(/mnt/112/sdb/4/d/dededick/sessions/sess_4a6b842cec07002a9123e47f1facd96c, 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 (/mnt/112/sdb/4/d/dededick/sessions) in Unknown on line 0
J'ai pensé :
ptet parce que j'ai pas ouvert de connexion à la bdd

Mammouth du PHP | 1353 Messages

21 juin 2006, 11:03

déjà avant que je regarde la suite enlève les commentaires avant le session_start

On a précisé que ca doit etre la 1ere ligne et c vraiment le cas, les commentaires html ne passeront pas si tu les mets avant.

Tu peux par contre les mettre en php si tu veux commenter :
<?php
//Ouvrir une session pour pas que les non-connectés accèdent à cette page 
session_start(); 
if (!isset($_SESSION['pseudo'])) { 
    header ('Location: index.html'); 
    exit(); 
} 
?>
tu as fait ca ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 11:04

Ben oui voilà le code:
<?php session_start();
//Ouvrir une session pour pas que les non-connectés n'accèdent pas à cette page
if (!isset($_SESSION['pseudo'])) {
    header ('Location: index.html');
    exit();
}
?>
<html>
<head>
<title> Bienvenue sur Poudlard2006 </title>
<meta http-equiv="content-language" content="fr">
 <link rel="stylesheet" media="screen" type="text/css" title="Essai" href="color.css" />

<SCRIPT LANGUAGE="JavaScript">
// a mettre entre <head> et <head/>
var max=0;
function textlist() {
max=textlist.arguments.length;
for (i=0; i<max; i++)
this[i]=textlist.arguments[i];
}
tl = new textlist(
"Bievenue sur ce site.",
"En cas de problème, un forum est à votre disposition.",
"Petites annonces:",
"Aujourd'hui, le cerveau a des capacités tellement étonnantes, que presque tout le monde en a un.",
"Un verre est à moitié plein d'eau; n'est-il pas plutôt à moitié vide?",
"Il semblerait que... mais on n'en est pas sur...",
"Vous pensez ne rien savoir? Mais rassurez-vous, vous savez au moins ça!"
);

var x = 0; pos = 0;
var l = tl[0].length;
function textticker() {
document.tickform.tickfield.value = tl[x].substring(0, pos) + "_";
if(pos++ == l) {
pos = 0;
setTimeout("textticker()", 2000);
if(++x == max) x = 0;
l = tl[x].length;
} else
setTimeout("textticker()", 50);
}
</script>
</head>
<BODY OnLoad="textticker()">

<center>
<form name=tickform>
<textarea name=tickfield rows=3 cols=38 style="background-color: rgb(0,0,0); color: rgb(255,255,255); cursor: default; font-family: Arial; font-size: 12px" wrap=virtual>Les infos apparaissent ici, une fois que la page est chargée.</textarea>
</form>
</center>
</script>



   </head>
   <script language="JavaScript">
function nextSize(i,incMethod,textLength){
  if (incMethod == 1) return (40*Math.abs( Math.sin(i/(textLength/3.14))) );
  if (incMethod == 2) return (255*Math.abs( Math.cos(i/(textLength/3.14))));
}

function sizeCycle(text,method,dis){   
  output = "";
  for (i = 0; i < text.length; i++){
    size = parseInt(nextSize(i +dis,method,text.length));
    output += "<font style='font-size: "+ size +"pt'>" +text.substring(i,i+1)+ "</font>";
  }
  theDiv.innerHTML = output;
}

function doWave(n){
  theText = "dededick.free.fr";
  sizeCycle(theText,1,n);       
  if (n > theText.length) {n=0}
  setTimeout("doWave(" + (n+1) + ")", 150);
}
</script>
<body>
<div id="en_tete">
<!-- Mettre la bannière -->
</div>
<div id="menu">
<div id="element_menu">
<ul id="lien2">
<li><a href="acceuil.html"> Arrivée à Poudlard2006 </a></li>
<li><a href="http://poudlard2006.goodforum.net"> La Grande Salle </a></li>

Mammouth du PHP | 536 Messages

21 juin 2006, 11:11

et ca marche alors?
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

dededick
Invité n'ayant pas de compte PHPfrance

21 juin 2006, 11:15

ben non vla ce qu'il me met: quand chui connecté :

Code : Tout sélectionner

Warning: session_start() [function.session-start]: open(/mnt/112/sdb/4/d/dededick/sessions/sess_04ff8bdb81f622489ed588649737b4d2, O_RDWR) failed: No such file or directory (2) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: Cannot modify header information - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 4 Warning: Unknown(): open(/mnt/112/sdb/4/d/dededick/sessions/sess_04ff8bdb81f622489ed588649737b4d2, 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 (/mnt/112/sdb/4/d/dededick/sessions) in Unknown on line 0
quand chui pas connecté:

Code : Tout sélectionner

Warning: session_start() [function.session-start]: open(/mnt/112/sdb/4/d/dededick/sessions/sess_1c58e01dc2a3870a3f8abd1d4ca63a8a, O_RDWR) failed: No such file or directory (2) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 1 Warning: Cannot modify header information - headers already sent by (output started at /mnt/112/sdb/4/d/dededick/acceuil.php:1) in /mnt/112/sdb/4/d/dededick/acceuil.php on line 4 Warning: Unknown(): open(/mnt/112/sdb/4/d/dededick/sessions/sess_1c58e01dc2a3870a3f8abd1d4ca63a8a, 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 (/mnt/112/sdb/4/d/dededick/sessions) in Unknown on line 0
Au fait, chez vous aussi c'est très lent?