$_POST

ViPHP
ViPHP | 2144 Messages

19 mai 2006, 08:58

Tu ne peux avoir aucun code html avant la création de la session.

Mammouth du PHP | 536 Messages

19 mai 2006, 09:11

donc il faudrait que je le mette tout en haut de ma page?
et après je peux laisser mon code html?
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 !!

Mammouth du PHP | 536 Messages

19 mai 2006, 09:14

ok d'accord ca marche maintenant, et maintenant que mon utilisateur est identifié, pour lui autoriser l'accès a certaines pages qui sont également protégées, je dois mettre uniquement session_start() à chaque début de page protégée?
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 !!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

19 mai 2006, 09:27

Non il ne suffit pas de mettre session_start() pour protéger ta page. Ca veut juste dire que tu démarres les sessions.

Pour protéger tu dois rajouter en plus une détection puis redirection si non ok. Par exemple :
<?php
session_start();
if (!isset($_SESSION['login'])) {
    header ('Location: index.php');
    exit();
}
?>
S'il ne détecte pas la session alors c'est que la personne n'est pas connecté, donc redirection à la page d'accueil.

Mammouth du PHP | 536 Messages

19 mai 2006, 09:31

d'accord
je vais essayer
mais ca veut dire aussi, que lorsqu'il s'identifie, je dois faire un truc du genre
$_session['login']=$_post['login']
sur la page qui vérifie si les champs sont corrects et après sur les autres pages, je dois mettre ce que tu m'as indiqué charabia ?
j'ai bien compris?
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 !!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

19 mai 2006, 09:37

En fait les étapes sont :
1. tu as le formulaire d'inscription. La personne se logue :
-> soit c'est pas bon auquel cas tu renvoies vers ce même formulaire
-> soit c'est ok et là tu as déclaré tes sessions. Tu as donc la session $_SESSION['login'] de déclarée qui correspond déjà à ton $_POST['login'].

2. la personne est connectée et rentre dans les pages sécurisées. Là grâce au code que je t'ai donné plus haut, si la session est reconnue, dans ce cas oui puisque que la personne est rentrée, alors la personne reste bien sur la page. Si une autre personne vient sur cette même page sans être loguée, elle sera refoulé puisque tu auras mis :
if (!isset($_SESSION['login']))
Dans le cas d'un inconnu, aucune session n'a été créee puisqu'il n'est pas passé par le formulaire. Donc hop à la porte :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

19 mai 2006, 09:42

La fonction session_start() doit être la première ligne dans une page php,
aucune ligne vide ou ligne html ou echo ne doit être avant sinon le serveur ne peut pas démarrer une session si des données ont été déjà affichées sur le navigateur.

Sous PHP, la session marche comme ça:
1. quand un client-navigateur demande une url de page, le serveur démarre une session pour ce client si la page demandée commence par session_start()
En fait, le serveur ne fait que créer un fichier dont le nom est un n° unique aléatoire (SID : identifiant de la session)
Le fichier SID va contenir toutes les variables de session de ce client (variables globales dont la durée de vie dure avec la navigation dans les page initialisées par session_start())
Les fichiers de sessions des clients connectés sont stockés par le serveur apache dans le dossier /tmp

2. la suite est logique : le serveur renvoi toujours le SID avec sa réponse au client-navigateur qui doit à son tour mémoriser auatomatiquement le SID dans ses cookies pour pouvoir le renvoyer une autre fois avec une nouvelle demande de page.

3. Le SID devient un ticket échangé entre le client et le serveur pour que ce dernier puisse recharger les données du client qui déclenche qui demande une page php.
En php, le fichier de session-client est accèssible par le tableau système $_SESSION.
Ainsi pour stocker une données le programme php l'écrit dans le tableau $_SESSION (ex: $_SESSION["nom"] = "ttoto"; $_SESSION["prix"]=100,00;)
De la même manière, pour lire des données le programme php utilise le tableau $_SESSION (ex: echo "$_SESSION[nom]";)

4. Quand un client efface ses cookies ou arrête son navigateur, il perd en fait ses SID auquel cas le serveur ne peut plus lui restituer ses fichiers de session donc ses données.
Le serveur détruit en fait tout fichier de session abondonné ou dont la durée de vie est dépassée ou si le programme le commande par session_destroy().

Pour la configuration des paramètres de session chez le serveur il faut consulter PHP.ini

Pour permettre les sessions client/serveur il faut que le client accèpte les cookies.

Exemple simple :
page1.php : cette page va être la première consultée et va stocker quelleque données dans une session
<?php
//démarrer ou réactiver une session pour un client
session_start();
//session_start : récupère un SID existant envoyé par le client 
//ou en crée un pour un nouveau client
//Un SID = un fichier session qui contient des données globales ($_SESSION)
?>

<p>Formulaire de saisie de données
<form>
<p>Nom <input name=nom>
<p>Prénom <input name=prenom>
<p><input type=submit action=action value=Enregistrer>
</form>

<?php
//Après validation, enregistrer les données envoyées par le formulaire dans la session
if ($_GET["enregistrer"])
   if ($_GET["nom"] && $_GET["prenom"]) {
           $_SESSION["nom"] = $_GET["nom"];
           $_SESSION["prenom"] = $_GET["prenom"];
           //Après enregistrement rediriger vers la suite
           header ("Location: page_suivante.php");
    } 
    else echo "<p>Données incorrectes!"; //Erreur: rester sur cette page
?>
Le page_suivante.php : récupère la session du client et recharge un certain nombre de données de session déjà stocké
<?php
//démarrer ou réactiver une session pour un client
session_start();
//session_start : récupère un SID existant envoyé par le client 
//ou en crée un pour un nouveau client
//Un SID = un fichier session qui contient des données globales ($_SESSION)
?>
<h1>Bienvenue, <?php echo "$_SESSION[nom] $_SESSION[prenom]"; ?> </h1>
Merci .....
Conclusion:
  • - Le client demande une page php qui fait un session_start()
    - Le serveur détermine le SID de ce client (nouveau/existant) = dans tous les cas un SID désigne un fichier de session + un tableau $_SESSION pour accèder au données du fichier ;
    Le serveur termine le programme de la page demandée et renvoi la réponse + le SID
    - Le client reçoit la réponse + le SID qu'il mémorise dans un cookie (si autorisé sur le navigateur sinon pas de session)
    Et le cycle est bouclé, à la prochaine demande de page le client remettra son SID avec (s'il s'agit bien sûr d'une page sur le même site)
    Le SID (n° aléatoire) est transmis par le client-navigateur automatiquement avec la requête HTTP.
Modifié en dernier par sadeq le 19 mai 2006, 09:58, modifié 2 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 536 Messages

19 mai 2006, 09:45

d'accord, ok j'ai compris
j'ai essayé et ca fonctionne
merci charabia et sadeq
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 !!