Lorsque dans un squelette est utilisée
#AUTORISER
,
#SESSION
ou toute balise demandant à créer un cache différent par session, un identifiant spécifique est calculé avec les informations de session connues du visiteur par la fonction
spip_session
. Cet identifiant est utilisé pour nommer les fichiers de cache. Lorsqu’aucune information n’est connue du visiteur, l’identifiant retourné est nul.
Le pipeline
definir_session
permet de compléter les informations servant à créer cet identifiant. Il est donc possible de composer des caches uniques s’appuyant sur d’autres paramètres que les données du visiteur.
Le pipeline reçoit et retourne une chaîne de caractères. Il est appelé de la sorte dans le fichier
ecrire/inc/utils.php :
$s = pipeline('definir_session',
$GLOBALS['visiteur_session']
? serialize($GLOBALS['visiteur_session'])
. '_' . @$_COOKIE['spip_session']
: ''
);
{{Remarque :}} les informations de session pouvant intervenir très tôt dans le fonctionnement de SPIP, il vaut mieux déclarer pour un plugin la fonction du pipeline directement dans un fichier d’options. La déclaration dans le fichier
plugin.xml
ne nécessite pas de définir la balise XML
<inclure>
dans ce cas là :
<options>prefixPlugin_options.php</options>
<pipeline>
<nom>definir_session</nom>
</pipeline>
Exemple
Le plugin « FaceBook Login » définit un cache dépendant aussi de l’authentification à FaceBook si elle est validée :
function fblogin_definir_session($flux){
$flux .= (isset($_SESSION['fb_session']) ? serialize(isset($_SESSION['fb_session'])) : '');
return $flux;
}
Le plugin « Forms & Tables » également définit un cache spécifique lorsque des cookies liés à ses formulaires sont trouvés :
function forms_definir_session($session){
foreach($_COOKIE as $cookie=>$value){
if (strpos($cookie,'cookie_form_')!==FALSE)
$session .= "-$cookie:$value";
}
return $session;
}
On notera que la balise dynamique
#FORMS
de ce plugin demande à créer un cache par session en mettant à
true
l’option
session
de la balise :
function balise_FORMS ($p) {
$p->descr['session'] = true;
return calculer_balise_dynamique($p, 'FORMS', array('id_form', 'id_article', 'id_donnee','id_donnee_liee', 'class'));
}