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 :

éviter d'appeler session_start ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 4
    Par défaut éviter d'appeler session_start ?
    Bonjour,

    Alors, voilà :

    je fais un petit cms pour tester des trucs et des machins en php. Mais, sur plein de pages, l'utilisateur n'a pas besoin d'être connecté, et pas besoin de session.

    Mais, par exemple dans l'en-tête, si et seulement si l'utilisateur est connecté, je veux mettre son login, etc...

    Je voudrais donc un système qui me permette de savoir si un utilisateur est connecté ou non, mais ne pas avoir besoin d'ouvrir de session du tout s'il se trouve qu'il n'est pas connecté.

    Donc, en gros, éviter de faire des choses du genre :

    session_start();
    ...
    if (isset($_SESSION["user"]) {...}

    où on ouvre une session dans tous les cas, avant de s'apercevoir qu'en fin de compte il n'y en a pas besoin.

    J'ai bricolé un truc qui marche, mais je ne sais pas
    a) si c'est utile - quel est le coût d'une session sans données ?
    b) s'il y a des solutions plus élégantes

    Bref, j'utilise un cookie, et le code pour savoir si l'utilisateur est connecté ou non est alors du type :

    if ($_COOKIE["connecte"]) {
    if (! isset($_SESSION)) {
    session_start();
    }
    ... on peut maintenant regarder dans $_SESSION...
    } else {
    // pas de connexion, pas besoin de session.
    }

    Je n'essaie d'ouvrir la session que si le cookie est fixé - et qu'elle n'est pas déjà ouverte par ailleurs.

    (je précise que tous les affichages sont faits après coup, ce qui rend la position de l'appel de session_start() beaucoup moins critique.

    Donc (en me répétant sans vergogne), ma question est :
    - est-ce que ça vaut la peine - pour un site avec beaucoup de visiteurs - de se fatiguer à faire ça ?
    - est-ce qu'il y a "mieux" ?

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Salut,

    Comme ça, je dirais que c'est se prendre la tête pour rien.

    D'après ce lien, ça changera rien au niveau des perfs car les sessions sont sans ralentissement des performances.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Comme ça, je dirais que c'est se prendre la tête pour rien.
    Pas tant que ça, je dirais pas pour la même raison.

    Vérifier qu'en retour on a un cookie confirme qu'on a affaire à un navigateur (plus exactement un client) qui enregistre bien les cookies.
    Du coup démarrer la gestion des session uniquement si cette condition est rempli n'est pas si inutile que ça.

    Faut savoir qu'une bonne partie des bot/spider (moteur de recherche, etc ...) n'enregistrent pas de cookie, donc ne nous le renvoie pas.
    Par conséquent si on démarre la gestion des sessions systématiquement à toutes les pages, et bien dans tel cas Php va créer une nouvelle session à chaque page demandée.
    Au bout on peu cumuler beaucoup de fichiers de sessions créés inutilement.
    Si le ramasse miette est défectueux ça peu faire ralentir considérablement le serveur (voir le saturer).



    Mise à part ça, il faudrait au moins faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ($_COOKIE["test"]) {
     
        // Démarrer la session
        session_start();
     
        if (isset($_SESSION['user'])) {
            // Traitement pour une personne identifiée
        }
    }
    // traitement pour tous
    C'est à dire de démarrer la session avant de vérifier le contenu de $_SESSION, sinon ce tableau ne contiendra rien.
    C'est le fait de démarrer la session que Php va automatiquement récupérer le contenu du fichier de la session et le mettre dans $_SESSION.


    Attention aussi à ne pas perdre de vu qu'une session (le cookie de session plus exactement) à un temps d'expiration, qui par défaut vaut 24 minutes.
    Donc admettons qu'une page ne demande pas obligatoirement que la personne soit identifiée, et bien si on ne démarre pas la session (pour soit disant faire une économie de traitement) et bien le temps d'expiration ne sera pas reconduit (reparti à 0).
    Du coup le temps défile, et si à la page suivante le temps est expiré, la personne ne sera plus considérée comme identifiée.
    Elle devra se ré-identifier.

    Donc démarrer la session est bien souvent nécessaire, pas seulement si une personne est identifiée.

Discussions similaires

  1. [MultiBinding] éviter les appels multiple d'un converter
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 07/11/2011, 19h11
  2. [Wamp] Erreur d'entête lors de l'appel à session_start
    Par gozu13 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 04/03/2008, 18h51
  3. problème lors de l'appel à session_start
    Par kumo dans le forum Langage
    Réponses: 16
    Dernier message: 22/10/2007, 22h23
  4. Appel à session_start() en cours de code
    Par mulot49 dans le forum Langage
    Réponses: 5
    Dernier message: 30/04/2007, 14h04
  5. Réponses: 1
    Dernier message: 14/03/2007, 14h07

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