[SPIP Zone] Questions sur #SESSION et #SESSION_SET

Bonjour à tou-te-s,

J'utilise les balises #SESSION_SET et #SESSION pour vérifier si un visiteur a bien lu un texte avant d'accéder au site; à la fin du texte il y a formulaire CVT, avec un bouton "j'ai lu"; l'action du formulaire est :

  include_spip('inc/session');
  if (_request('lu')=="oui") session_set('lu', true);
  if (_request('lu')=="non") session_set('lu', '');

Ensuite dans les squelettes, un simple test sur la variable 'lu' de la balise session permet d'autoriser l'accès ou non au contenu :

  [(#SESSION{lu}|oui)
  <INCLURE{fond=inclure/blocs/contenu}/>
  ]

Ma démarche est de ne pas obliger un visiteur à s'identifier, mais seulement de vérifier s'il a bien cliqué sur "j'ai lu".

J'aurais 2 questions à propos de #SESSION et #SESSION_GET :

1. est-ce qu'il y a un moyen de régler la durée pendant laquelle la variable 'lu' sera présente dans la balise #SESSION ?

2. pouvez-vous confirmer que #SESSION est bien disponible même pour un utilisateur non identifié ? (je ne suis jamais sur de ne pas avoir été authentifié, à un moment ou un autre, sur mes sites SPIP...)

Merci par avance,
Cyril

1. est-ce qu'il y a un moyen de régler la durée pendant laquelle la variable
'lu' sera présente dans la balise #SESSION ?

non, c'est la durée de la session. Si tu veux limiter dans le temps
ajoute un session_set('lu_date', date()) et contrôle if
(session_get('lu') AND session_get('lu_date' < date de fin...)) .

2. pouvez-vous confirmer que #SESSION est bien disponible même pour un
utilisateur non identifié ? (je ne suis jamais sur de ne pas avoir été
authentifié, à un moment ou un autre, sur mes sites SPIP...)

Oui

-- Fil

Le 27/05/2010 11:18, Fil a écrit :

ajoute un session_set('lu_date', date()) et contrôle if
(session_get('lu') AND session_get('lu_date'< date de fin...))

Du coup dans le "traiter" du formulaire ça donne ceci :

   if (_request('lu')=="oui") {
     session_set('lu', true);
     session_set('temps_initial', time());
   }

et dans les squelettes, le test (après le 1er test sur 'lu') :

   [(#SET{age_session, [(#EVAL{time()-#SESSION{temps_initial}})]})]
   [(#GET{age_session}|<{3600}|oui)[ session OK!(#GET{age_session})ms]]

Merci Fil !

S'lt

[(#SET{age_session, [(#EVAL{time()-#SESSION{temps_initial}})]})]
[(#GET{age_session}|<{3600}|oui)[ session OK!(#GET{age_session})ms]]

ça ne serait pas plus leger ?

[(#EVAL{time()}|moins{#SESSION{temps_initial}}|<{3600}|oui)
session ok
]

Le 27/05/2010 13:07, cam.lafit@azerttyu.net a écrit :

ça ne serait pas plus leger ?

[(#EVAL{time()}|moins{#SESSION{temps_initial}}|<{3600}|oui)
session ok
]

Si, bien sur ! Voila une brillante utilisation du filtre "moins" à la place de #EVAL{a-b}, merci azerttyu !

Au final il faudra tester 2 conditions :

1. vérifier que le texte a bien été lu :
   [(#SESSION{lu}|oui)]

2. vérifier que la session ne soit pas trop ancienne :
   [(#EVAL{time()}|moins{#SESSION{temps_initial}}|<{3600}|oui)]

Ce qui donne :
   [(#SESSION{lu}|oui)
     [(#EVAL{time()}|moins{#SESSION{temps_initial}}|<{3600}|oui)
       <INCLURE{fond=inclure/blocs/contenu}/>
     ]
   ]

Ce qui donne :
[(#SESSION{lu}|oui)
[(#EVAL{time()}|moins{#SESSION{temps_initial}}|<{3600}|oui)
<INCLURE{fond=inclure/blocs/contenu}/>
]
]

et le filtre |et{} alors ?

[(#SESSION{lu}|et{#EVAL{time()}|moins{#SESSION{temps_initial}}|<{3600}}|oui)
<INCLURE{fond=inclure/blocs/contenu}/>
]

--
Fil