Page 1 sur 2

les sessions pour l'accès à certaines pages

Posté : 21 juin 2006, 14:55
par dededick
Bonjoru à tous voici mon code de la page connexion.php:
<?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 connecté <br/><br/>';
  echo'Vous rendre sur la page <a href="acceuil.php"> 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;
}
?>
Le code de ma page acceuil.php:
<?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:arrivee.php');
    exit();
}
else 
{
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>
et le code de ma page arrivee.php:
<html>
<head>
<title> Page d'acceuil </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="inscription.php"> Inscription </a></li>
<li><a href="connexion.html"> Connexion </a></li>
<li><a href="deconnexion.php"> Se déconnecter</a></li>
</ul>
<ul id="lien2">
<h4> Dans la base </h4>
<li><a href="rassemblement.php">Rassemblement</a></li>
<li><a href="diplomes.php"> Diplômes </a></li>
<li><a href="bibliotheque.php">Bibliothèque  </a></li>
<li><a href="librairie.php"> Librairie </a></li>
<li><a href=""
</ul></div></div>
<div id="corps">
Ya un truc qui plante: même si je suis pas connecté, j'arrive à accéder à ma page arrivee.php, pourquoi? merci :)

Posté : 21 juin 2006, 14:59
par Ryle
Tout simplement parce qu'il n'y a aucun controle sur ta page arrivee.php restreignant l'accès à celle ci... n'importe qui peut donc l'ouvrir, authentifié ou non. :)

Si tu souhaite en protéger l'accès, il te faut tout au début de cette page ajouter un session_start() pour récuperer la variable $_SESSION et vérifier si les champs que tu attends sont correctement renseignés. Si ce n'est pas le cas, tu peux rediriger l'utilisateur avec un header(), arrêter le traitement avec exit(), afficher un message particulier, ...

Posté : 21 juin 2006, 15:01
par dededick
fo ke je rajoute ça?
<?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();
}
?>

Posté : 21 juin 2006, 15:02
par Orni
Chaque fois que tu veux utilise les variables en $_SESSION["xxxx"], il te faut obligatoirement mettre session_start() au tout début de ta page.

Posté : 21 juin 2006, 15:04
par dededick
ça marche pas: il me redirige à chaque fois vers le header :(

Posté : 21 juin 2006, 15:08
par Ryle
S'il exécute à chaque fois le header(), c'est qu'il rentre à chaque fois dans le if(), que par conséquent la condition !isset($_SESSION['pseudo'])) est toujours vrai et que donc $_SESSION['pseudo'] ne doit jamais être défini...

est-il bien mis en session ? (print_r($_SESSION) pour voir ce qu'elle contient)
sachant que tu n'as toujours pas de session_start() dans ta page connexion.php pour démarrer la session et y stocker le pseudo, je doute qu'elle soit renseignée... ;)

Posté : 21 juin 2006, 15:08
par HanX
Chaque fois que tu veux utilise les variables en $_SESSION["xxxx"], il te faut obligatoirement mettre session_start() au tout début de ta page.
pas obligatoirement ! ça dépend comment est configuré php

Posté : 21 juin 2006, 15:15
par Orni
Chaque fois que tu veux utilise les variables en $_SESSION["xxxx"], il te faut obligatoirement mettre session_start() au tout début de ta page.
pas obligatoirement ! ça dépend comment est configuré php
Oui mais par défaut c'est désactivé sinon ça prend des ressources.

Posté : 21 juin 2006, 17:22
par dededick
Faut que j'ouvre une session_start() dans ma page connexion.php?

Au tout début?

Posté : 21 juin 2006, 17:25
par Ryle
Faut que j'ouvre une session_start() dans ma page connexion.php?

Au tout début?
Bah voui.. sinon il ne démarre pas la session, et tout ce que tu peux mettre dans ta variable $_SESSION (genre le pseudo) n'est pas conservée d'une page à l'autre :)

Posté : 21 juin 2006, 17:27
par dededick
ce qui donne :
<?php
session_start();
// 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;
}
?>

Posté : 21 juin 2006, 17:41
par dededick
Et ça marche (à prioris ^^) !!!
Merci beaucoup! :D :D :D

Posté : 21 juin 2006, 17:42
par Ryle
[Résolu] :?: :wink:

[résolu]

Posté : 21 juin 2006, 17:45
par dededick
Oui, résolu, mais je sais pas comment le mettre :?

Posté : 21 juin 2006, 18:03
par Ryle
Tu as un joli bouton résolu orange à gauche qui te tends les bras en criant "clique moi, clique moi !" ;)