IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Variable de session, ou define à chaque chargement de page ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut Variable de session, ou define à chaque chargement de page ?
    Bonjour,

    J'ai une 100aine de valeurs constantes à conserver de page en page, et j'hésite entre les stocker dans une variable de session (sous forme de tableau), ou faire un define() de chaque valeur, à chaque appel d'une page.

    Je suppose que la création des constantes de chaque valeur risque de rallonger le temps d'exécution du script, mais j'ai peur que conserver un tableau de 100 valeurs en mémoire pour chaque utilisateur récemment connecté pose problème, en cas de forte affluence.

    D'après vous, quelle est la solution la plus adaptée en cas de fort trafic?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si ca peut influencer ton choix
    - les sessions ne sont pas stockés en mémoire mais sous forme de fichier.
    - le temps d'initialisation de 100 variables est microscopique par rapport a d'autres facteurs.

    Mais pourquoi sur toutes les pages tu as besoin de 100 variables ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Par défaut
    Il s'agit de constantes que j'utilise pour définir les droits des groupes d'utilisateurs sur mes pages. Le nombre de constantes dépends en fait du nombre d'actions de mon site.

    Au début du programme, je définis donc une constante pour chaque droit du site, puis je fais une comparaison binaire entre les droits de l'utilisateur et ceux nécessaires pour effectuer l'action demandée.
    Si j'ai 100 droits à gérer, même si l'utilisateur n'a qu'un seul droit, j'aurais 100 constantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    define('DROIT_LECTURE_FICHE', 0x01);
    define('DROIT_AJOUT_FICHE', 0x02);
    define('DROIT_MODIF_FICHE', 0x04);
    ...
    $droits = 0x03; // Ce chiffre sera récupéré à partir d'une BDD
    if(defined("DROIT_LECTURE_FICHE") && ($droits & DROIT_LECTURE_FICHE))
    {
    ...
    }

    L'autre solution plus pratique à maintenir serait d'utiliser un array() contenant uniquement les permissions de l'utilisateur, que je pourrais passer en variable de session afin de ne pas avoir à refaire une requête MySQL à chaque chargement de page, pour savoir si la personne a accès à cette fonction.
    Si il n'a qu'un seul droit, le tableau contiendra 1 ligne. S'il a 100 droits, il aura 100 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $_SESSION['droits'] = array('DROIT_LECTURE_FICHE' => true,
    	'DROIT_AJOUT_FICHE' => true); // Droits récupérés de la BDD
    if(isset($_SESSION['droits']['DROIT_LECTURE_FICHE'])) 
    {
    ...
    }
    La 2e solution me tenterait plus, car je n'aurais pas à définir une nouvelle constante à chaque action ajoutée à mon site, et de plus j'aurais dans mon tableau uniquement les permissions acquises. Cependant, j'avais peur que ce tableau soit gardé en mémoire, et qu'en cas de forte affluence, il y ait saturation au niveau de la mémoire allouée à PHP.

    D'après toi, la 2e solution te semble-t'elle plus adaptée?

  4. #4
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Bonjour

    Une constante restera définie "en dur" sur ton script, pas vraiment pratique dans ton cas.
    Il est plus judicieux de les collecter dans une base de données, et ainsi d'élaborer des champs comprenant les différents droits (0x01,0x02,0x03, etc..).

    Et ce n'est qu'au moment de l'identification que tu pourras mettre en session les variables utiles, et autoriser certains accés en fonction de ces X variables de session, par exemple si elles sont "isset", ou d'autres conditions de ton choix.

    En résumé, une seule requête MySQL suffit pour conditionner et sécuriser ton applicatif.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/11/2008, 18h38
  2. variable de session qui se vide entre deux pages
    Par mnem0 dans le forum Langage
    Réponses: 6
    Dernier message: 21/11/2007, 15h53
  3. executer une fonction JS a chaque chargement de page
    Par drinkmilk dans le forum Firefox
    Réponses: 1
    Dernier message: 09/11/2007, 15h25
  4. Réponses: 1
    Dernier message: 02/08/2006, 17h57
  5. Affichage différente à chaque chargement de page
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/05/2006, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo