L'interface SessionHandlerInterface
SessionHandlerInterface
&reftitle.intro;
SessionHandlerInterface est une interface
qui définit un prototype minimal 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 peut 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.
&reftitle.interfacesynopsis;
SessionHandlerInterface
&Methods;
&reftitle.examples;
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.
savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}
return true;
}
public function close(): bool
{
return true;
}
#[\ReturnTypeWillChange]
public function read($id)
{
return (string) @file_get_contents("$this->savePath/sess_$id");
}
public function write($id, $data): bool
{
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
public function destroy($id): bool
{
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}
return true;
}
#[\ReturnTypeWillChange]
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
]]>
&reference.session.entities.sessionhandlerinterface;