Tout sur les sessions

Description

Comme promis a hicksman voici un tuto sur les sessions.

Vous trouverez d'abord un petit exemple de 5 pages qui montre l'utilisation simple d'une session, comment on enregistre des variable, comment on les éffaces, comment on ferme la session ...

Ensuite vous trouverez les explications sur toutes les fonctions relatives aux sessions.

Pour faire ce tuto, je me suis aidé de "la bible php" pour certaines fonctions que je n'utilise jamais. Je vous conseil ce livre de 1400 pages trés complets mais assez cher par contre :-/ (59? essayez la fnac c'est moins cher souvent)

Source / Exemple :


>>>>> page index.php

<?
$variable = "tortue"; // on initie la variable

session_start(); // Démarage de la session OBLIGATOIRE
session_register("variable"); // On enregistre une variable appelée "variable" dans la session SANS LE $ DEVANT

if (session_is_registered(variable)) // si la variable est enregistrée
{
	echo "Variable de session <b>enregistrée</b> ...<br>";
	echo "<a href=\"viewsession.php\">Options des sessions</a><br>";
	echo "<br><br>L'id de la session est <b>".session_id()."</b>    ";
	exit;
}
else // La variable n'est pas enregistrée
{
	echo "Variable de session <b>non enregistrée</b> ...";
	exit;
}
?>

----------------------------------------------------------------------------------------

>>>>> page viewsession.php

<?
	session_start(); // Démarage de la sessions OBLIGATOIRE

	echo "La variable de session qui a été enregistrée est <b>".$_SESSION[variable]."</b><br>";
	echo "<a href=\"ajoutvariable.php\">Ajoutons une variable à la session</a><br>";
	// Notez ici le $_SESSION qu'il faut utiliser lorsque register_global est à off
	// Nous aurions pu écrire directement $varaible mais
	// depuis la dernière version de php les register_global sont à off dans la configuration initial
	// dans un soucis de sécurité. Donc pensez à utiliser cette orthographe pour vous servir de vos variables de session
	echo "<br><br>L'id de la session est <b>".session_id()."</b>";
	exit;
?>

----------------------------------------------------------------------------------------

>>>>> page ajoutvariable.php

<?
	session_start(); // Démarage de la sessions OBLIGATOIRE
	$nom = "Geniale";

	session_register("nom"); // On enregistre une variable appelée "nom" dans la session SANS LE $ DEVANT
	
	if (session_is_registered(nom)) // si la variable est enregistrée
	{
		echo "Opération réussie, La variable <b>\"nom\"</b> a été enregistrée dans la session<br>";
		echo "<a href=\"effacement.php\">Effaçons maintenant la variable \"nom\"</a><br>";
		echo "<br><br>L'id de la session est <b>".session_id()."</b>";
		exit;
	}
	else
	{
		echo "Enregistrement <b>raté</b> ...";
		exit;
	}
?>

----------------------------------------------------------------------------------------

>>>>> page effacement.php

<?
	session_start(); // Démarage de la sessions OBLIGATOIRE
	
	if (session_is_registered(nom)) // si la variable nommée "nom" est enregistrée on peut l'éffacer
	{
		echo "La variable nom a comme valeur <b>".$_SESSION[nom]."</b><br>";
		
		if (session_unregister(nom)) // si elle est éffacée
		{
			echo "La variable <b>\"nom\"</b> a été éffacée ...<br>";
			echo "La preuve, essayons de l'afficher ici : <b>".$_SESSION[nom]."</b><br>";
			echo "<a href=\"destruction.php\">Destruction des variables de session</a><br>";
			echo "<br><br>L'id de la session est <b>".session_id()."</b>";
			exit;
		}
		else // éffacement raté
		{
			echo "Effacement raté ...";
			exit;
		}
	}
	else // la variable nommée nom n'existe pas
	{
		echo "La variable nommée \"nom\" n'existe pas ...";
		exit;
	}
?>

----------------------------------------------------------------------------------------

>>>>> page destruction.php

<?
	session_start(); // Démarage de la sessions OBLIGATOIR

	session_unset();

	if (session_destroy())
	{	
		echo "A ce stade il nous reste la Variable <b>\"variable\"</b> enregistrée<br>";
		echo "Normalement <b>session_destroy</b> et <b>session_unset</b> l'ont détruit, testons ceci : ".$_SESSION[variable]."<br>";
		echo "<b>Rien n'apparait</b>, la variable n'existe plus et si il y en avait eu d'autre, elles n'existeraient plus<br>";
		echo "Opération réussie<br>";
		echo "<br><br>L'id de la session est <b>".session_id()."</b><br>";
		echo "Oups elle n'exite plus nom plus ;-)<br><br>";
		exit;
	}
	else
	{
		echo "Effacement raté ...";
		exit;
	}
?>

Conclusion :


!!! AUCUNE BALISE HTML NE DOIT ETRE ENVOYE AVANT UNE SESSION !!!

Car les sessions modifient le header (entête) de la page et mais quand le header est déjà lancé il ne peut plus être modifié.

- session_start() indique que l'on demande l'ouverture d'une session

- session_register("variable") indique que l'on enregistre une variable dans la session (attention de ne pas mettre le $ devant le nom de la variable)

- session_unregister() permet de détruire une variable de session

- session_is_registered() renvoit si la variable de session existe ou pas

- session_name() permet le connaitre le nom de la session mais vous pouvez trés bien le changer en faisant session_name(nomdemasession)

- session_id() nous permet de connaitre l'id de la session courante. Vous pouvez le changer en faisant session_id(nomdelasession)

- session_destroy() détruit toutes les variables de la sessions en cours

- session_write_close() sert à écrire les données de session et termine la session.

- session_save_path() indique le dossier ou sont enregistrées les sessions sur le server mais vous pouvez modifier ce dossier en faisant session_save_path(chemindemondossier)

- session_get_cookie_params() permet d'avoir tous les renseignements sur la session courante.Tout ça est retourné dans un tableau, utilisons ici la fonction print_r pour afficher tout le contenu du tableau (la fonction print_r affiche le contenu de tout tableau, pas seulement pour les sessions, utilse pour le debug)

Info de la session courante :
Array ( [lifetime] => 0 [path] => / [domain] => [secure] => )

les variables retournées sont :
lifetime -> La durée de vie du cookie de la variable
path -> Le chemin de stockage du cookie de la session
domain -> Le domaine du cookie de la session
secure -> Indique si le cookie de session doit etre envoyé que par une connexion sécurisé

- session_set_cookie_params() permet de modifier les 3 premières variables reçue par session_get_cookie_params(). Méthode d'utilisation :
session_set_cookie_params(durée de vie du cookie de session,Chemin de sotckage du cookie de session,Domaine du cookie de session)

- session_set_save_handler() indique a php d'utiliser des fonctions personnalisées pour la gestions des sessions.
Cette fonction prend 6 attributs :
- Ouvrir
- Fermer
- Lire
- Ecrire
- Detruire
- Nettoyer
pour chacun de ses attributs vous devrez faire une fonction ou vous indiquerez tout ce que vous voulez en vous servant des conseils et des fonctions de cette page.

- session_encode converti l'ensemble des variables de sessions en une chaine de caracteres unique

- session_decode recré les variables de session converties par session_encode

- session_module_name permet de définir ou de connaitre le gestionnaire de session utilisé :
- files : les données sont temporairement enregistrées
- user : vous voulez personnaliser le stockage

- session_cache_limiter() affiche la restriction du cache appliquée. Vous pouvez aussi la définir en faisant session_cache_limiter(Variable)
Variable doit prendre comme valeur :
- nocache pour que la page ne soit pas mis en cache par le client
- public pour autoriser la mise en cache
- private est un peu plus restrictif que public
- private_no_expire permet de ne pas envoyer l'entete expire

- session_cache_expire() sert à définir ou à connaitre la durée avant expiration du cache. Pour changer l'expiration faite session_cache_expire(nombredeseconde)

=== LES ERREURS === (maj 12/11/2003)

J'ai décidé, vu le grand nombre de message que je reçoi portant souvent sur la meme chose, de mettre ici les erreurs les plus rencontrées sur les sessions

--- "Warning: Cannot send session cache limiter - headers already sent ........"
Comme je l'ai dit plus haut, il ne faut pas de html ou une ligne blanche avant le debut de la session. Donc assurez vous que les 2 premieres ligne de votre page soit :
<?
session_start();

Comme ça au moins vous etre sur que votre session sera bien ouverte.
Si dans le script vous avez la meme erreur alors que les 2 premieres lignes sont bonne, cela peut etre du à plusieur chose :
- Vous essayez d'ajouté une variable de session alors que le html a déjà était lancé.
- Une ligne de votre script génére un message d'erreur. Ce message s'affiche (il est donc en html) et donc le html est lancé, modification des header de la page impossible.

===================

Si vous avez d'autres messages d'erreurs qui ne sont pas répertoriés ici, envoyé les moi en précisant (si vous l'avait) la solution. Sinon envoyé moi un message pour que je vous aide.

Voila vous savez tout sur les sessions.
Si vous avez un problemes sur les sessions ou sur autre choses passer sur le forum j'y suis souvent !!

Bon coding !!
++

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.