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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    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 émérite
    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
    Points : 2 446
    Points
    2 446
    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.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    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 éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    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 à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    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 éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    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.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    mince ! c'est ce que je veux éviter justement, en plus pour moi ces paramètres sont dans une table mysql comprenant les attributs de chaque membre/client.
    Il n'y a donc pas moyen de faire une classe "connexion" ou la connexion est établie une fois au départ et ensuite on s'y réfère d'une façon ou d'une autre sans à avoir à donner les paramètres de connexion ?

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    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 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par berlo44 Voir le message
    mince ! c'est ce que je veux éviter justement, en plus pour moi ces paramètres sont dans une table mysql comprenant les attributs de chaque membre/client.
    ??? je vois pas très bien comment peut fonctionner ton système. Si les paramètres de connexion à la bdd sont dans une table, comment fais-tu pour te connecter à cette table pour obtenir les paramètres de connexion ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Il y a plusieurs bases ce n'est pas la même.

    Dans la première table, si l'identification est bonne, je récupéré ("DSN","USER","PWD") pour me connecter à une autre base.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Ce n'est pas clair ce que j'ai écris ?

    J'ai encore cherché, et vraiment je n'arrive pas à comprendre/savoir si on peut se référencer d'une manière ou d'une autre à un objet PDO créer au départ dans le script d'authentification sans à avoir à redonner les paramètres de connexion.

    Sinon je peux faire passer ces paramètres dans les variables de session, mais ce n'est pas très sécurisant, non ?

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