Skip to content
Extraits de code Groupes Projets
Valider 7da5c3e7 rédigé par Fil's avatar Fil
Parcourir les fichiers

possibilite d'ajouter ce qu'on veut dans la session spip du visiteur

un exemple rapide
#CACHE{0}
[(#SESSION_SET{compteur,[(#SESSION{compteur}|plus{1})]})]
#SESSION{compteur}

affichera 1, puis 2, 3, 4 a chaque reload
parent 2473f239
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -74,36 +74,64 @@ function ajouter_session($auteur) { ...@@ -74,36 +74,64 @@ function ajouter_session($auteur) {
} }
} }
// Ajouter une donnee dans la session SPIP
// http://doc.spip.org/@session_set
function session_set($nom, $val=null) {
$GLOBALS['visiteur_session'][$nom] = $val;
ajouter_session($GLOBALS['visiteur_session']);
actualiser_sessions($GLOBALS['visiteur_session']);
}
// Lire une valeur dans la session SPIP
// http://doc.spip.org/@session_get
function session_get($nom) {
return $GLOBALS['visiteur_session'][$nom];
}
// Quand on modifie une fiche auteur on appelle cette fonction qui va
// mettre a jour les fichiers de session de l'auteur en question.
// (auteurs identifies seulement)
// http://doc.spip.org/@actualiser_sessions // http://doc.spip.org/@actualiser_sessions
function actualiser_sessions($auteur){ function actualiser_sessions($auteur){
if (!intval($id_auteur = $auteur['id_auteur'])) if (!intval($id_auteur = $auteur['id_auteur']))
return; return;
// .. mettre a jour les sessions de cet auteur
// memoriser l'auteur courant (celui qui modifie la fiche)
$sauve = $GLOBALS['visiteur_session']; $sauve = $GLOBALS['visiteur_session'];
include_spip('inc/session');
// .. mettre a jour les sessions de l'auteur cible
foreach(preg_files(_DIR_SESSIONS, '/'.$id_auteur.'_.*\.php') as $session) { foreach(preg_files(_DIR_SESSIONS, '/'.$id_auteur.'_.*\.php') as $session) {
$GLOBALS['visiteur_session'] = array(); $GLOBALS['visiteur_session'] = array();
include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible
foreach (array('id_auteur', 'nom', 'login', 'email', 'statut', 'lang', 'ip_change', 'hash_env', 'bio', 'pgp', 'nom_site', 'url_site', 'en_ligne', 'auth', 'session_nom', 'session_email') AS $var)
if (isset($auteur[$var])) $auteur = array_merge($GLOBALS['visiteur_session'], $auteur);
$GLOBALS['visiteur_session'][$var] = $auteur[$var]; ecrire_fichier_session($session, $auteur);
ecrire_fichier_session($session, $GLOBALS['visiteur_session']);
} }
if ($GLOBALS['visiteur_session']['id_auteur'] == $sauve['id_auteur'])
// restaurer l'auteur courant
$GLOBALS['visiteur_session'] = $sauve;
// si c'est le meme, rafraichir les valeurs
if ($auteur['id_auteur'] == $sauve['id_auteur'])
verifier_session(); verifier_session();
else
$GLOBALS['visiteur_session']= $sauve;
return;
} }
// http://doc.spip.org/@ecrire_fichier_session // http://doc.spip.org/@ecrire_fichier_session
function ecrire_fichier_session($fichier, $auteur) { function ecrire_fichier_session($fichier, $auteur) {
// ne pas enregistrer ces elements de securite
// dans le fichier de session
unset($auteur['pass']);
unset($auteur['htpass']);
unset($auteur['low_sec']);
unset($auteur['alea_actuel']);
unset($auteur['alea_futur']);
// enregistrer les autres donnees du visiteur
$texte = "<"."?php\n"; $texte = "<"."?php\n";
foreach (array('id_auteur', 'nom', 'login', 'email', 'statut', 'lang', 'ip_change', 'hash_env', 'bio', 'pgp', 'nom_site', 'url_site', 'en_ligne', 'auth', 'session_nom', 'session_email') AS $var) { foreach ($auteur as $var => $val)
if (isset($auteur[$var])) $texte .= '$GLOBALS[\'visiteur_session\'][\''.$var.'\'] = '
$texte .= '$GLOBALS[\'visiteur_session\'][\''.$var.'\'] = ' . _q($val).";\n";
. _q($auteur[$var]).";\n";
}
$texte .= "?".">\n"; $texte .= "?".">\n";
return ecrire_fichier($fichier, $texte); return ecrire_fichier($fichier, $texte);
......
...@@ -871,6 +871,21 @@ function balise_SESSION_dist($p) { ...@@ -871,6 +871,21 @@ function balise_SESSION_dist($p) {
return $p; return $p;
} }
//
// #SESSION_SET{x,y}
// Ajoute x=y dans la session du visiteur
function balise_SESSION_SET_dist($p) {
$_nom = interprete_argument_balise(1,$p);
$_val = interprete_argument_balise(2,$p);
$p->code = 'session_set('.$_nom.','.$_val.')';
$p->interdire_scripts = false;
return $p;
}
// //
// #EVAL{...} // #EVAL{...}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter