Introduction
Le principe des sessions avec PHP est un peu différent des sessions avec ASP si tu ne l'avais pas remarqué ;-). Dès que tu ouvres une page ASP, automatiquement une session s'ouvre sur ton ordinateur (Session_onStart()) et dès que tu fermes ton fureteur ?et/ou? tu te déconnectes du site (tu changes de page), tu fermes ta session ASP (Session_onEnd()). En ASP, tu as toujours accès à tes variables de sessions... n'importe où, n'importe quand ce qui n'est pas le cas en PHP...
En PHP, c'est toi qui décide si une page possède une gestion de Session ou non, quand est-ce que tu veux la partir dans la page et quand est-ce que tu veux la finir. Les variables sont disponibles dans tout le code. De plus, le PHP a deux attributs de plus pour les sessions... le nom de la session et l'identifiant de la session... donc si tu n'as pas les cookies... tu dois envoyé dans tes URLs le nom de la session=l'identifiant de la session. On appelle ca le SID (nom d'une constante! sans $) genre <a href="page.php?<?=SID ?>"></a>.... soit session_name()."="session_id(). Voir la remarque sur Multimania...
Petit Exemple
PageLogin.php1 ============= session_start(); // on commence une session session_register('MATRICULE'); // on enregistre une variable $MATRICULE = '9883194' // on y affecte une valeur après l'avoir enregistré! $SID = session_name().'='.session_id(); // on construit le SID header('Location: '.$strSitePath.'PageAccueil.php?'.$SID); // et on change de page.... ou header('Location: '.$strSitePath . 'PageAccueil.php?'.SID); // <-- je ne suis pas très sur facon la! PageAccueil.php =============== session_start(); // on commence ou on récupère les infos de la session.... if ( session_is_registered('MATRICULE') ) // on vérifie si on a enregistré la variable MATRICULE! { echo 'VARIABLE MATRICULE ENREGISTRÉE!!'; echo 'MATRICULE = ' . $MATRICULE; // on affiche le matricule ou encore... echo 'MATRICULE = '.$_SESSION['MATRICULE']; // on est sur que c'est la variable de la session! echo 'CE DÉCONNECTER ICI: <a href="PageLogout.php"> Page Logout </a>'; } else { echo 'VARIABLE MATRICULE NON ENREGISTRÉE'; } PageLogout.php ============== session_start(); // on start la session pour mieux la fermer! session_destroy(); // full destroy la session!
Les sessions sur Multimania!
Les sessions sur multimania sont à moitié facilité car on est pas obligé de passé le session_name() et le sesion_id().. il est automatiquement transmis grâce à une configuration côté serveur. Par contre, tu peux avoir de la difficulté à cause des '//' dans les URLs...
Fonctions
- string session_name ( [string name])
- Retourne le nom de la session....
(on peut changer le nom de la session avec le paramètre name...) - string session_id ( [string id])
- Retourne l'identifiant de session courante. Si id est fourni, il remplacera l'identifiant courant de la session.
- boolean session_start ( void)
- boolean session_register ( mixed name [, mixed ...])
- boolean session_is_registered ( string name)
- boolean session_destroy ( void)
Session et Cookie
Après un session_start(), écrire:
setcookie("PHPSESSID",session_id(),time()+3600*24); // (fpdf / 26-11-2001 20:52 )
Titre: Passage du SID avec la fonction header()
Description: Lorsqu'on utilise les sessions avec l'option
--enabled-trans-sid activée, le passage de la constante SID s'ajoute automatiquement
dans les formulaires (un champ hidden est ajouté) et dans les URL du site.
Cependant puisque la fonction header() est exécutée en PHP, ce n'est ni un formulaire HTML, ni une URL (code HTML),
le SID n'est pas envoyé et l'on recrée une autre session. On perd donc les variables enregistrées avant la fonction header();.
[sans le SID passé par la méthode POST ou GET, la fonction session_start() créer un autre SID].
Solution: On peut remédier à ce problème en écrivant:
header('Location: page.php?'.SID);
Cependant, si on remarque que la constante SID est nulle, on peut ajouter cette ligne:
if (!defined('SID')) define ('SID',session_name() . '=' . session_id());
Et si le SID est vide, on est obligé de travailler avec une autre constante (SID2 par exemple):
if (empty('SID')) define ('SID2',session_name() . '=' . session_id());