SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Auteurs et Authentification > Authentification

Balise #SESSION

jeudi 28 juin 2007, par Développé sur spip-zone, James. Dernier ajout dimanche 4 novembre 2007

Toutes les versions de cet article :


La balise #SESSION fonctionne comme #CONFIG à ceci près qu’elle s’appuie sur le tableau associatif $auteur_session. Le paramètre passé en argument détermine la valeur de session à afficher. Pour avoir une liste exhaustive des valeurs possible, consultez la doc de la fonction ajouter_session


mise à jour 25-8-07 : Cette balise est désormais incorporée au code de SPIP, cf. http://zone.spip.org/trac/spip-zone...

Installation

Zip - 9.1 ko
plugin balise_session
Téléchargez, dézippez dans le répertoire plugins/ de votre site et activez le plugin Balise Session
  • Téléchargez l’archive ci-contre,
  • décompressez là dans le répertoire plugins/ de votre site,
  • dans la page de gestion des plugin de votre site, activez le plugin Balise Session

Vous pourrez accéder à cette même documentation sur votre propre site (spip.php?page=session) avec des exemples interactifs.

Principe

Pour reconnaître le visiteur authentifié, on s’appuie sur le mécanisme de session de SPIP. Toutefois, comme cette valeur est affichée dans un squelette, on doit aussi tenir compte du cache et empêcher que les données d’un visiteur soient utilisée par les suivants, le temps de la durée de vie de la page.

Deux moyens peuvent être employés :

  • Définir à 0 la durée de vie du cache de chaque page où on affichera ou testera le contenu de la balise #SESSION. C’est une mauvaise idée en matière de performance globale pour le site
  • Créer une page de cache de chaque page pour chaque visiteur authentifié. Ainsi, les visiteur accèdent à des pages distinctes calculées moins souvent. C’est le principe retenu dans cette page.

On introduit donc, en plus de la balise, un script session.php, appelable par la balise standard <INCLURE()>. Ce script est un clone du script standard de spip (spip.php) à ceci-près qu’il défini un marqueur de squelette basé sur l’identifiant du visiteur, s’il est défini.

Appel spécifique des noisettes

On fera appel à la balise #SESSION dans des squelettes inclus (qu’on appelle aussi noisettes...)

<INCLURE(session.php){fond=page_speciale}>

page_speciale.html contiendra l’un au l’autre des exemples du plugin, ou de leurs combinaisons, ou d’autres éléments issus de cette page de démonstration, ou bien encore, de votre propre cru ! :D

Gestion de valeurs supplémentaires

Il est possible de gérer des valeurs supplémentaires à celles contenues dans le tableau $auteur_session. Pour cela, il faut ajouter le paramètre {session} à l’appel de squelettes inclus. Dès lors, la balise #SESSION s’appuiera aussi sur le tableau associatif $_SESSION php standard (cf. Le support des sessions de PHP).

Exemple : <INCLURE(session.php){session}{fond=boite_session}>

Ce plugin introduit pour ces valeurs, une action permettant de créer/affecter une valeur en lui précisant un nom, ou de vider cette valeur. Pour faire appel à cette action, on utlisera soit un formulaire ad hoc, soit, dans ce type précis de noisettes, la balise #URL_ACTION_AUTEUR de la manière suivante :

<a href="[(#URL_ACTION_AUTEUR{session,[(#ENV{session})]-affecter-nom-valeur,url})]">
texte du lien
</a>

ou

  • nom sera le code employé pour restituer la valeur via la notation #SESSION{nom},
  • valeur pourra être une balise spip ou une constante,
  • url, l’adresse de destination du lien, #SELF ou tout autre adresse imaginable.

ou bien

<a href="[(#URL_ACTION_AUTEUR{session,[(#ENV{session})]-vider-nom,url})]">
texte du lien
</a>

Démonstration

spip-zone.info


Répondre à cet article

  • Balise #SESSION

    14 avril 2008 20:54, par Julien

    Et comment faire pour lire cette session depuis un script PHP indépendant de SPIP ?? Je souhaite savoir dans ce script php si l’internaute est connecté ou non à l’admin de SPIP. Merci de votre aide

    Répondre à ce message

    Retour au début des forums

  • Lors de la première recherche effectuée via le moteur de mon site, il y a souvent un plantage, avec l’erreur suivante :

    Fatal error : Call to undefined function spip_unlink() in /var/www/www.termelleries.fr/plugins/... on line 163

    Si une nouvelle recherche est effectuée, il n’y a plus de plantage.

    Quelqu’un a t il déjà eu ce bug ?

    Merci beaucoup

    Répondre à ce message

    • Fatal error : Call to undefined function spip_unlink() 25 février 2008 10:54, par livier

      J’utilisais le plugin sans problème apparent, mais j’ai obtenu le même message quand j’ai voulu utiliser ’Gribouille’ .
      - SPIP 1.9.2b [10268]
      - Balise session jeudi 29 novembre 2007, 00:03:58 (UTC+0100)17116

      L’erreur apparait à l’appel de la rubrique gribouillable, et disparait quand on désactive le plugin "session".

      J’espère avoir fait avancer le chmillblick ;-)

      Répondre à ce message

    Retour au début des forums

  • Balise #SESSION

    20 juillet 2007 15:15, par zerocool

    rebonjour

    est ce qu’avec ce plugin on peut creer un genre d’espace membre comme il y a beaucoup sur les sites c’est a dire que la personne (visiteur) identifié (connecté) peut aller sur une page pour y modifier ses infos et les autres visiteurs, redacteurs... peuvent voir les infos de n’importe qui sans possibilité de les modifier ?

    Merci

    Répondre à ce message

    • Balise #SESSION 20 juillet 2007 16:36

      Oui.

      De rien. :)

      Répondre à ce message

      • Balise #SESSION 20 juillet 2007 16:57, par zerocool

        bon pour modifier ses informations quand on est connecté ca je sais le faire suffit d’utiliser le crayon mais comment les visiteurs peuvent consulté les infos de n’importe quel membre inscrit (visiteur,redacteur,admin) ?

        Répondre à ce message

      • Pointer sur la page "admin_plugins" 27 décembre 2007 15:33, par Joker

        Depuis l’installation de la balise SESSION, les rédacteurs et les administrateurs restreints ne peuvent pas utiliser l’espace privé car la redirection systèmatique est vers la page "plugins" et le message dit "vous n’avez pas droit à l’accès". il leur est donc impossible de créer un article ou autre chose dans l’espace privé. Quant au statut "administrateur", tout va bien. Je décoche le plugin SESSION. Tout redevient normal. j’utilise 1.9.2 c et le plugin "acces groupes".

        Merci de votre aide.

        Répondre à ce message

        • Pointer sur la page "admin_plugins" 28 décembre 2007 17:48, par philou

          Même problème : plugin utilisés : session + accès restreint + autorité

          Répondre à ce message

          • Pointer sur la page "admin_plugins" 3 janvier 2008 20:48, par James

            Joker, philou, mea culpa, un soucis dans la génération du zip.

            Ce sera corrigé sous peu, mais pour celles et ceux qui ont installé le plugin, il leur faudra supprimer les fichiers suivants :

            • balise_session/public/assembler.php
            • balise_session/public/cacher.php
            • balise_session/public/references.php

            et ça devrait rouler.

            Répondre à ce message

            • Pointer sur la page "admin_plugins" 4 janvier 2008 01:03, par Cedric

              Pour être complet les 3 fichiers ci-dessus permettent de gérer la balise #SESSION aussi dans les modèles, comme sur la version SPIP de développement. Il est donc mieux de les garder, mais il est vrai qu’ils déclenchent le bug dans l’espace privé.

              Pour corriger le bug il faut donc ajouter

              dans le fichier options_session.php du plugin.

              Je blanchis James par la même occasion car c’était moi le coupable !

              Répondre à ce message

    Retour au début des forums

  • Je comprends bien l’utilité d’une telle balise, cependant je n’arrive pas à remplacer le code qui est ajouté sur chaque page du squelette afin que le site soit fermé aux personnes non connectées.

    <?php
    if (($auteur_session) {
    ?>

    Un indice serait le bienvenu, merci par avance.

    Répondre à ce message

    • Balise #SESSION pour remplacer $auteur_session 3 février 2008 11:59, par all sécu

      Tu y est presque, voici la syntaxe correcte :

      <?php if ($auteur_session) { ?>

      blabla si conecté


      <?php } else { ?>

      [(#LOGIN_PUBLIC)]


      <?php } ?>

      Répondre à ce message

      • Je pensais justement que le plugin SESSION permettait de remplacer le php pour définir si l’utilisateur était connecté ou pas, et que cela pouvait être appliqué à toutes les pages.

        Répondre à ce message

        • Balise #SESSION pour remplacer $auteur_session 4 février 2008 09:09, par James

          Oui, il permet de remplacer le php :

          [(#SESSION{id_auteur}|?{' '})
             #INCLURE{fond=article-autorise}
          ]
          [(#SESSION{id_auteur}|?{'',' '})
             #LOGIN_PUBLIC
          ]

          mais alors, rien n’empêcherait un visiteur non authentifé d’appeler l’adresse spip.php?page=article-autorise

          l’objectif de #SESSION est de différencier les pages en fonction du visiteur et non de déterminer les persmissions. Pour cela, il faut voir du coté des plugins d’accès restreint... et de choisir un de ceux qui peut s’associer avec #SESSION

          Répondre à ce message

          • Ok.

            Merci pour ces précisions.

            Répondre à ce message

          • Balise #SESSION pour remplacer $auteur_session 4 février 2008 16:59, par Stephane

            Il suffit de mettre les squelettes inclus dans un sous repertoire pour qu’ils ne soient pas appelables directement.

            Et l’idéal, c’est de mettre la balise session DANS l’inclure, pour que son cache soit "personnel", mais pas dans le squelette appelant, qui lui peut utiliser un cache général.

            par exemple en faisant :

            <INCLURE{fond=bloc/article-autorise}{id_article}>

            et dans /squelettes/blocs/article-autorise.html :

            <BOUCLE_A(ARTICLES){id_article=(#SESSION{id_auteur}|?{#ID_ARTICLE,0})}>
            ...
            </BOUCLE_A>
            #LOGIN_PUBLIC
            <//B_A>

            (pas testé mais c’est pour l’idée générale)

            @++

            Répondre à ce message

            • Balise #SESSION pour remplacer $auteur_session 4 février 2008 17:03, par James

              ça me fait penser que ce serait pas bête de filer des pages 401.html et 403.html en plus de la 404... pas testé non plus :P

              Répondre à ce message

              • Balise #SESSION pour remplacer $auteur_session 4 février 2008 17:41, par Stephane

                Pour la 403, amha, ca depend du squelette.

                Tout le monde ne souhaite pas forcement exposer l’information que le contenu existe en accès restreint.

                Mais dans la dist, il pourrait y avoir :

                <BOUCLE_art(ARTICLES){id_article}>
                ...
                </BOUCLE_art>
                <BOUCLE_art_erreur(ARTICLES){id_article}{statut?}>
                [(#INCLURE{fond=403}{id_article})]
                </BOUCLE_art_erreur>
                [(#INCLURE{fond=404}{id_article})]
                <//B_art_erreur>
                <//B_art>

                mes 2 sous.

                Répondre à ce message

        • Balise #SESSION pour remplacer $auteur_session 4 février 2008 10:29, par Beurt

          Il y a quand même une possibilité de remplacer le PHP par #SESSION en contournant un peu (bref un hack un peu sale) :

          D’abord on crée une variable qu’on réutilisera :

          1.  
          2. <BOUCLE_N_importe_quelle_rubrique(RUBRIQUES){0,1}>
          3.         #SET{rubrique_pour_tester,#ID_RUBRIQUE}
          4. </BOUCLE_N_importe_quelle_rubrique>
          5.  

          Ensuite on va réutiliser rubrique_pour_tester pour conditionner notre squelette à la présence d’une session :

          1.  
          2. [(#SET{condition_boucle,''})]
          3. [
          4.         (#REM) Ici, on vérifie que la session existe. si c'est le cas, on affecte la variable «condition_boucle» avec «rubrique_pour_tester», sinon, on la laisse vide.
          5. ]
          6. [(#SESSION{id_auteur}|?{' ',''})
          7.         [(#SET{condition_boucle,#GET{rubrique_pour_tester}})]
          8. ]
          9. [
          10.         (#REM)Ce qui est à l'intérieur de la BOUCLE qui suit ne s'exécute que si la session existe, car si la session n'existe pas «condition_boucle» est vide et donc ne contient pas un id_rubrique.
          11. ]
          12. <BOUCLE_CONDITIONNELLE_Session_ou_pas(RUBRIQUES){id_rubrique=#GET{condition_boucle}}>
          13.         Ici, la partie du squelette a éxécuter quand la session existe...
          14.  
          15. </BOUCLE_CONDITIONNELLE_Session_ou_pas>
          16.  
          17.         Ici, l'autre partie du squelette, c'est-à-dire celle qui s'exécute quand la session n'existe pas. Par exemple un #LOGIN_PUBLIC
          18.  
          19. <//B_CONDITIONNELLE_Session_ou_pas>
          20.  

          Pour que ça fonctionne, je pense que #CACHE{0} est indispensable (James, tu confirmes ?).

          On peut décliner pas mal ce genre de boucles conditionnelles en changeant

          1.  
          2. [(#SESSION{id_auteur}|?{' ',''})
          3.         [(#SET{condition_boucle,#GET{rubrique_pour_tester}})]
          4. ]
          5.  

          Par la condition que vous voulez tester (#ENV, diverses balises, etc.). On peut aussi faire en sorte que la BOUCLE ne serve pas qu’à tester une variable en ne choisissant pas la rubrique de « rubrique_pour_tester » au hasard, mais en choisissant celle que l’on va utiliser (ou bien faire une boucle conditionnelle, sur des MOTS, des ARTICLES, des BREVES... Bref, ce que vous voulez car c’est très flexible...)

          C’est très pratique, et permet d’éviter le PHP...

          Répondre à ce message

          • Balise #SESSION pour remplacer $auteur_session 4 février 2008 10:35, par James

            #CACHE{0} est à éviter. Le but essentiel du plugin et de la balise intégré en version de développement, c’est d’éviter ça justement.

            Sinon, bien vu pour le reste :)

            Répondre à ce message

            • Balise #SESSION pour remplacer $auteur_session 4 février 2008 11:44, par Beurt

              Ok, donc le squelette proposé ci-dessus doit être dans une noisette inclue avec un <INCLURE> dynamique ? Ou est-ce qu’on peut l’appeler directement par spip.php?page=ma_page_avec_boucle_conditionnelle (sans que le cache ne donne la page de quelqu’un d’autre) ? Il y a là quelque chose que je n’ai pas bien compris avec la balise #SESSION et le cache...

              Répondre à ce message

              • Balise #SESSION pour remplacer $auteur_session 4 février 2008 17:55, par Stephane

                ...doit être dans une noisette inclue avec un dynamique ?

                Non, je pense que ca marche avec #INCLURE aussi (1.9.2d et SVN) et bien sur sans #CACHE{0}, mais dans ce cas, c’est le cache englobant qui sera "personnel", ce qui est dommage puisque seul le contenu de l’inclusion change d’un utilisateur à l’autre.

                est-ce qu’on peut l’appeler directement par spip.php ?page=ma_page_avec_boucle_conditionnelle (sans que le cache ne donne la page de quelqu’un d’autre) ?

                pour ce qui est de l’appel direct, avec #INCLURE contenant #SESSION, c’est comme si #SESSION était directement dans le squelette, donc un cache différent pour chaque auteur authentifié (on devrait d’ailleurs plutôt dire "sessionné" car de mémoire, un post dans un forum va créer une session et donc l’utilisateur aura un cache spécifique quand #SESSION est présent)

                Je ne sais pas si tout a été backporté dans la 1.9.2 (Cedric tu confirmes ou je dis des betises ?)

                Répondre à ce message

    Retour au début des forums

  • Balise #SESSION et les autres auteurs connectés

    12 octobre 2007 12:13, par Cédric Couvrat

    Bonjour,

    Comment afficher la liste des auteurs (et/ou administrateurs) connectés au site, comme on peut le voir dans l’espace privé ("actuellement en ligne).

    Merci

    Répondre à ce message

    • Balise #SESSION et les autres auteurs connectés 12 octobre 2007 12:44, par James

      Ce n’est pas le rôle de cette balise, qui par définition, n’affiche que du contenu lié au seul visiteur connecté et identifié. Il n’y a, à ma connaissance, pas de contribution récente et documentée sur ce sujet, mais il est possible que certains squelettes, notamment pour des forums, intègrent ce genre de fonctionnalité. Il serait bon dans ce cas, de la sortir de leur contexte pour en faire une contribution autonome et réutilisable.

      Répondre à ce message

    Retour au début des forums

  • Balise #SESSION et les balise de langue

    11 octobre 2007 16:58, par artisan-multimedia

    Bonjour,

    Lorsque je conditionne l’affichae de texte en testant la balise session, j’ai un léger souci : c’est la balise langue qui s’affiche, et pas sa traduction : c’est bien dommage.

    Un exemple :

    [(#SESSION{id_auteur}|?{
                     '<a href="spip.php?page=spip_login" class="petit" alt="Proposez un nouvel article"><:proposer_article:></a>&nbsp;|&nbsp;

    me laisse <:proposer_article :> au lieu de sa traduction. Je pense que ce serait une bonne correction pour ce plugin qui, par ailleurs est très bien :).

    Répondre à ce message

    • Balise #SESSION et les balise de langue 11 octobre 2007 17:08, par James

      La bonne écriture :

      [<!-- cet(#SESSION{id_auteur}|?{' espace '})est accessible aux seuls visiteurs authentifiés ;)-->

      <a href="#URL_PAGE{truc}"><:texte:></a>

      ]

      Il ne faut pas (enfin, on ne peut pas) mettre du code SPIP dans les paramètres du filtre conditionnel.

      Répondre à ce message

    Retour au début des forums

0 | 25 | 50



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net