definir_session

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'));
}

Auteur Matthieu Marcillaud Publié le : Mis à jour : 08/02/10

Traductions : English, français