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

PHP & Base de données Discussion :

connexion persistante (ou non) et paramètres de connexion


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Par défaut connexion persistante (ou non) et paramètres de connexion
    Bonjour,

    Je récupéré les paramètres de connexion à la base de donnée de clients lors du login de ceux-ci en interrogeant une table mysql "maitresse" ou ils sont stockés sous forme cryptée. C'est à dire : j'interroge la table maitresse pour identifier le client, si son login/mdp sont bons, je récupère les DSN, USER, PWD pour se connecter à une autre base ou sont stockées les données à traiter.
    Dans mon script d'identification, je ferme alors la connexion à la première base pour me connecter à la deuxième. J'essaie ainsi d'assurer un minimum de sécurité en ne faisant pas apparaître les identifiants de chaque clients en clair et en ne les inscrivant pas en session.

    Ensuite j'aimerai conserver cette connexion à la base pour l'utiliser de script en script. Est-ce possible sans fournir à nouveau les paramètres de connexion du client ?

    J'ai commencé avec un singleton d'une classe PDO, mais j'ai des connaissances limitées en développement objet et je me demande si cela est possible, si je ne fais pas fausse route...

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    dans apache configuré pour les processus et les processus légés, chaque execution de php est indépendante l'une de l'autre. Je veux dire que chaque appel de ressource (image, html, flux rss...) est traité de façon indépendante à chaque fois. Donc

    bon maintenant les connexions persistantes. La connexion persistante est, si j'ai bien compris, une sorte de mutualisation de la session ouverte d'un script à l'autre, faite au niveau du pilote. Du coup si ton serveur est suffisement chargé tu conserveras la même connexion vers la bdd pour générer plusieurs page.

    L'avantage c'est que ça permet de bien utiliser le cache et en lecture on doit s'y retrouver. Par contre en écriture, comme les requetes de tous les visiteurs vont passer par la même session (au sens oracle) ou la même connexion il est possible que la base ait plus de mal pour s'y retrouver dans de très rares cas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Par défaut
    merci pour ta réponse.

    C'est surtout le fait d'établir une connexion sans fournir à nouveau les paramètres de connexion qui m’intéresse surtout. J'ai cru comprendre qu'il fallait mieux passer par une connexion persistante et un singleton PDO. Après il y a peut-être d'autre méthode, mais si ça va plus vite en lecture ça me va bien, car c'est essentiellement de la consultation que je veux faire.

    Par contre, concrètement je n'arrive pas à le réaliser pour l'instant.

    J'utilise la class de JM Lecarpentier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
     
    /**
     * Singleton fournissant la connexion à la base de données.
     * @author Jean-Marc Lecarpentier
     */
     
    class Outils_Bd {
      /* pour être sûr qu'il n'y a qu'une et une seule instance */
      private static $instance;
     
      /* le lien de connexion BD (objet PDO) */
      protected $connexion;
     
      /* constructeur privé qui initialise la connexion*/
      private function __construct() {
        /* création d'un objet PDO avec les constantes définies dans la configuration */
        $this->connexion = new PDO(PDO_DSN, USER, PASSWD);
        /* mettre Exception comme mode d'erreur */
          $this->connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      }
     
      /* clonage impossible */
      private function __clone() {}
     
      /**
       * Accéder à l'UNIQUE instance de la classe
       */
      static public function getInstance() {
        if (! (self::$instance instanceof self)) {
          self::$instance = new self();
        }
        return self::$instance;
      }
     
      /**
       * Accesseur de la connexion
       */
      public function getConnexion() {
        return $this->connexion;
      }
    }
    ?>
    Ma grosse interrogation réside dans les constantes "(PDO_DSN, USER, PASSWD)" qui chez moi ne le sont pas justement. Comment faire pour conserver la connexion sans les donner à chaque script ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par berlo44 Voir le message
    Ma grosse interrogation réside dans les constantes "(PDO_DSN, USER, PASSWD)" qui chez moi ne le sont pas justement. Comment faire pour conserver la connexion sans les donner à chaque script ?
    Tu peux utiliser le multiton, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    class connect_bdd
    {
            private static $instance = array();
     
            private function __construct($db_name)
            {
                    require_once('fichier_des_donnees_de_connexion');
     
                    // Permet de verifier que la base de donnees demandee existe
                    if( !array_key_exists($db_name, $database) )
                            throw new Exception('[connect_bdd] given database name "'.$db_name.'" is not configured');
     
                    mysql_select_db($database[$db_name], $connection);        
            }
     
            public static function getInstance($db_name)
            {
                    // Si l'instance de connexion à la base de donnees n'existe pas, creation puis ajout à la liste des instances
                    if( !array_key_exists($db_name, self::$instance) )
                    {
                            self::$instance = new connect_bdd($dbname);
                    }
     
                    return self::$instance[$db_name];
            }        
    }
     
    connect_bdd::getInstance('db1');
    connect_bdd::getInstance('db2');
    connect_bdd::getInstance('db1');
    Sinon attention avec les connexions persistantes car le fait qu'elles ne se ferment pas entre deux connexions augmente le risque de dépasser le nombre de connexions simultanées autorisées sur ton serveur.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Par défaut
    merci je vais regarder cela, mais j'ai vraiment du mal à capter, ça patauge dur.
    c'est un peu complexe pour un début en POO.

    edit : dans l'exemple, il y'a un fichier des données de connexion quelque part en dur non ? on s'y réfère à chaque appel à la class ou non ?

    D'autres points dont je ne suis pas sûr :
    Il faut bien mettre l'objet en session ?
    pour cela il faut le linéariser avec serialize(), mais comme ce n'est pas possible avec un objet pdo, il faut utiliser les fonctions magiques sleep() et wakeup() ?
    j'ai bon ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par berlo44 Voir le message
    merci je vais regarder cela, mais j'ai vraiment du mal à capter, ça patauge dur.
    c'est un peu complexe pour un début en POO.

    edit : dans l'exemple, il y'a un fichier des données de connexion quelque part en dur non ? on s'y réfère à chaque appel à la class ou non ?
    Oui (avec le require_once) ça centralise les données sensibles sur une seule page.

Discussions similaires

  1. Connexions persistantes vs connexions non persistantes
    Par webrider dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/03/2007, 09h44
  2. tranferts de paramètre de connexion outlook express
    Par dirty_boy dans le forum Outlook Express / Windows Mail
    Réponses: 2
    Dernier message: 05/12/2005, 11h43
  3. [CR9][RAS] Publication d'états,paramètre et connexion BD
    Par youl dans le forum Connectivité
    Réponses: 4
    Dernier message: 10/01/2005, 10h20
  4. [PHP & PostGreSQL] Connexion persistante & Res Id
    Par BuLma dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 25/08/2003, 11h35
  5. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37

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