L'interface SessionHandlerInterface
(PHP 5 >= 5.4.0, PHP 7)
Introduction
SessionHandlerInterface est une interface qui définit un prototype pour la création d'un gestionnaire de session personnalisé. Afin de passer un gestionnaire de session personnalisé à la fonction session_set_save_handler() en utilisant son invocation OOP, la classe doit implémenter cette interface.
Notez que ces méthodes sont destinées à être appelées de manière interne par PHP, et non depuis l'espace utilisateur.
Synopsis de la classe
Exemple #1 Exemple avec SessionHandlerInterface
L'exemple qui suit propose un gestionnaire de stockage de sessions basé sur des fichiers,
basiquement comme les sessions PHP fonctionnent en interne de manière native, avec le
gestionnaire embarqué files
. Cet exemple pourrait être transformé
facilement pour utiliser une base de données.
Nous utilisons le style orienté objet avec session_set_save_handler() et nous enregistrons la fonction de fermeture grâce au paramètre de la fonction. C'est en général conseillé lorsque le gestionnaire de session est basé sur des objets.
Pour plus de brièveté, cet exemple omet la validation d'entrée. Toutefois, les paramètres $id sont en fait des valeurs fournies par l'utilisateur qui nécessitent une validation/assainissement appropriée pour éviter les vulnérabilités, telles que les problèmes de parcours de chemin. N'utilisez donc pas cet exemple sans modification dans les environnements de production.
<?php
class MySessionHandler implements SessionHandlerInterface
{
private $savePath;
public function open($savePath, $sessionName)
{
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}
return true;
}
public function close()
{
return true;
}
public function read($id)
{
return (string)@file_get_contents("$this->savePath/sess_$id");
}
public function write($id, $data)
{
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
public function destroy($id)
{
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}
return true;
}
public function gc($maxlifetime)
{
foreach (glob("$this->savePath/sess_*") as $file) {
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
unlink($file);
}
}
return true;
}
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// enregistre/récupère des données avec $_SESSION
Sommaire
- SessionHandlerInterface::close — Ferme la session
- SessionHandlerInterface::destroy — Détruit une session
- SessionHandlerInterface::gc — Nettoie les vieilles sessions
- SessionHandlerInterface::open — Initialise la session
- SessionHandlerInterface::read — Lit les données de session
- SessionHandlerInterface::write — Ecrit les données de session
Version en cache
22/11/2024 00:02:34 Cette version de la page est en cache (à la date du 22/11/2024 00:02:34) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-class.sessionhandlerinterface.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.