voir si une session est ouverte par PHP

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je souhaiterais savoir s'il existe une fonction PHP pour savoir si une session est ouverte sous Drupal. C'est pour modifier la position d'un élément selon si une session est ouverte ou pas.

Merci d'avance,

Kirby

Forum : 
Version de Drupal : 
Tags : 

(malheureusement) en drupal une session est ouverte que l'utilisateur soit anonyme ou authentifié, ce qui n'est pas top pour les perfs, mais c'est une autre histoire. J'imagine que tu veux donc savoir non pas si une session est ouverte (ce qui est toujours le cas) mais si cette session correspond à un utilisateur anonyme ou authentifié.

Pour compléter la réponse de chu, il y a aussi une fonction toute faite pour cela : user_is_anonymous(), il suffit donc de tester !user_is_anonymous().

PS: pour $user, je conseille pour éviter les gags de sécurité de lui préférer $GLOBALS['user'].

pour $user, je conseille pour éviter les gags de sécurité de lui préférer $GLOBALS['user']

Je n'étais pas au courant de cette "bonne pratique". Tu as un lien qui explique ces "gags de sécurité"?
Merci d'avance.

Oh bé je vais te l'expliquer direct :) Imagine quelque part, collé dans le thème, et de préférence dans un XXX-YYY-ZZZ.tpl.php (oui, y'en a qui n'aiment définitivement pas template.php...)

<?php
 
// on n'aime pas les anonymes !!!
 
global $user;
 if (
$user->uid==0) {
  
drupal_access_denied();
   exit();
 }
 
?>

<bla> bla
...
bla </bla>

  <?php
 
// 40 kilomètres plus loin, un autre dev a besoin d'ajouter un autre traitement, au hasard, une liste des utilisateurs
 
$cursor=db_query('select uid from user where plouf plouf, je veux tous les auteurs');

  // Et là, patatra, le gars a complètement oublié son global au tout début, il trouve
  // logique de faire une variable $user, et du coup, l'utilisateur actuellement connecté pour
  // qui cette page est construite, va hériter des droits du dernier de la boucle....
 
while ($user=db_fetch_object($cursor)) {
     ...
  }
 
?>

Et ce gag, sans rire, je l'ai vu des tonnes de fois.... Et toi, tu passes comme un âne des heures à comprendre pourquoi un "simple utilisateur" devient brutalement "auteur" et peu du coup foutre le brun en éditant des contenus, etc...

Idéalement, faudrait que dans drupal, $user soit proscrit et remplacé par une fonction du genre user($user=NULL).

Génial, le "if($GLOBALS['user']->uid==0)..." a fonctionné à merveille, c'est exactement ce que je voulais.

Toutefois, juste pour le spécifier, je n'avais pas trop besoin de sécurité, c'est juste pour qu'un élément soit positionné différemment de si un utilisateur est connecté ou non. Mais je crois qu'il vaut mieux avoir de bonnes habitudes :)

Merci à tous!