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 :

Faire cohabiter plusieurs sessions


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Points : 273
    Points
    273
    Par défaut Faire cohabiter plusieurs sessions
    Bonjour,


    Je cherche actuellement à faire cohabiter plusieurs sessions (pour un même visiteur ou plutôt pour un même membre).

    C'est à dire que je souhaiterais pourvoir lancer 2 sessions sur une même page. Malheureusement, lorsque je cherche à faire cela, j'ai une erreur qui m'ai retourné par php...
    A session had already been started - ignoring session_start()
    Mes sessions ne porte pas le même nom (par contre elles sont enregistrées au même endroit).

    Malgré mes recherches pour faire cela, je n'ai pas encore trouvé d'éléments de réponse. Dans la faq, il y a bien quelque chose (et c'est ce que j'avais cherché à faire) mais la solution ne fonctionne pas.
    http://php.developpez.com/faq/?page=...s_cohabitation


    Cordialement,
    Patouche

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Pourquoi ne pas faire simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_SESSION[1]['valeur1'] = 'ma valeur 1 pour session 1';
    $_SESSION[1]['valeur2'] = 'ma valeur 2 pour session 1';
    $_SESSION[2]['valeur1'] = 'ma valeur 1 pour session 2';
    // etc...
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 123
    Points : 8 278
    Points
    8 278
    Billets dans le blog
    17
    Par défaut
    C'est à dire que je souhaiterais pourvoir lancer 2 sessions sur une même page.
    Tu ne peux pas à proprement parler.

    Malgré mes recherches pour faire cela, je n'ai pas encore trouvé d'éléments de réponse. Dans la faq, il y a bien quelque chose (et c'est ce que j'avais cherché à faire) mais la solution ne fonctionne pas.
    http://php.developpez.com/faq/?page=...s_cohabitation
    Ceci est utile pour différencier les sessions au sein de la même arborescence, par pour les faire cohabiter sur la même page.

    Ce que tu peux faire : utiliser un tableau, ex. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_SESSION['modules']['auth']['id'] = 123 ;
    $_SESSION['modules']['auth']['nickname'] = 'Julien' ;
    $_SESSION['modules']['admin']['id'] = 234 ;
    ...
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    Pourquoi ne pas faire simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_SESSION[1]['valeur1'] = 'ma valeur 1 pour session 1';
    $_SESSION[1]['valeur2'] = 'ma valeur 2 pour session 1';
    $_SESSION[2]['valeur1'] = 'ma valeur 1 pour session 2';
    // etc...
    Parce que je souhaite pouvoir récupérer des valeurs dans les sessions des autres (en gros, un peu comme de la mémoire partagée) donc je ne souhaite pas que mes sessions aient des noms trop "pourris"...

    Et pour les curieux, j'ai enfin réussi à avoir plusieurs sessions sur la même page et cela fonctionne à (presque) à merveille. En effet, l'id de la session n'est pas encore regénéré (mais ça il me faudrait un petit regenerate_id...)...

    Donc, sisi, c'est possible...

    J'ai fais une classe pour la gestion des sessions et voici le code de test :
    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
    <?php
    // Fichier de test des scripts.
     
    include('lib/System.php');
    System::init(); // Lancement du système
     
    $s = new System_Session('who');
    $s->a = 12;
    $s->b = 'anonyme';
     
    $s2 = new System_Session('toto');
    $s2->a = 15;
    $s2->b = 'tata';
     
    $s->t = 'test';
     
    echo($s);
    echo($s2);
    et voici le résultat à l'ecran :
    System_Session :
    Id de la session : 2aa1e593eedf8b3f1010be3faa0498ae
    Nom de la session : who

    * a => int(12)
    * b => string(7) "anonyme"
    * t => string(4) "test"

    System_Session :
    Id de la session : 2aa1e593eedf8b3f1010be3faa0498ae
    Nom de la session : toto

    * a => int(15)
    * b => string(4) "tata"
    Comme vous pouvez le constater, les id de sessions n'ont pas été modifié... voici le petit dernier point qu'il me faut régler...


    Cordialement,
    Patouche

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 123
    Points : 8 278
    Points
    8 278
    Billets dans le blog
    17
    Par défaut
    Et pour les curieux, j'ai enfin réussi à avoir plusieurs sessions sur la même page
    Comment stockes-tu les données derrière ? Comment les transmets-tu de page en page ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $s = new System_Session('who');
    $s->a = 12;
    $s->b = 'anonyme';
     
    $s2 = new System_Session('toto');
    $s2->a = 15;
    $s2->b = 'tata';
    Quel est l'avantage sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $_SESSION['who']['a'] = 12 ;
    $_SESSION['who']['b'] = 'anonyme' ;
     
    $_SESSION['toto']['a'] = 15 ;
    $_SESSION['toto']['b'] = 'tata' ;
    ??
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par patouche Voir le message
    Et pour les curieux, j'ai enfin réussi à avoir plusieurs sessions sur la même page et cela fonctionne à (presque) à merveille. En effet, l'id de la session n'est pas encore regénéré (mais ça il me faudrait un petit regenerate_id...)...
    Donc, sisi, c'est possible...
    Cordialement,
    Patouche
    Désolé tu n'as rien fait que de créer d'autres variables de session, dans ta session !

    Car même si tu ne nous a pas montré le contenu de lib/System.php
    inutile de le faire, il est
    1) impossible de faire un deuxiéme session_start();
    2) dans toutes les pages de ton domaine sauf si tu détruit ta session
    si tu fais session_start(); tu ne fait que récupérer tes données
    que tu peux modifier, en ajouter, en supprimer ça ne changera rien
    a l'affaire
    3) il en va de même pour les cookies, tu peux en creer 1000 ils créeront
    1000 lignes dans le seul cookies du micro du visiteur, LE cookies
    du domaine visité

    bien que pour les cookies, il existe un paramétre qui permets d'avoir un cookies par domaine/répertoire !

    quand aux valeurs partagées seul une base de donnée te le permet !

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Points : 273
    Points
    273
    Par défaut
    Et bien l'idée est assez simple, je stocke cela dans des dossier que je défini moi-même (session_save_path)

    Les transmettre de page en page n'est pas le problème puisque cela opère de la même manière que les sessions normale... Sur une page quand tu déclares $_SESSION['name'] = 'toto'; et sur une autre page quand tu écris echo ($_SESSION['name']); ça te renvoie bien "toto" à l'écran. Et bien mon système est identique. Sur une page tu fais $s->name = 'toto'; et sur une autre page echo($s->name); tu as bien à l'écran "toto";

    L'interet, c'est que si je suis un utilisateur A et que je veux acceder à des informations de l'utilisateur B (information qui sont de toutes façon stocké dans la session de l'utilisateur B) et bien je peux y accéder sans passé par la base de données...

    Je ne sais pas encore si cela est "potentiellement" une bonne optimisation mais il me semble que oui. A voir...


    Cordialement,
    Patouche


    Edit :

    @FoxLeRenard : Faux, puisque j'observe souvent mes cookies (sur certains sites afin d'en comprendre le fonctionnement) et ils possèdent bien sur leurs serveurs 2 sessions pour certaines personnes. Ensuite, non, je n'ai pas fais que "créer d'autres variables de session, dans ma session" (voir le message)

    1) "impossible de faire un deuxième session_start();" => faux puisque je le fais après un session_write_close
    2) dans toutes les pages de ton domaine sauf si tu détruit ta session => faux voir le 1)
    3) il en va de même pour les cookies, tu peux en creer 1000 [...] => c'est pas vrai : voir le message

    Enfin, bien évidement que je n'aurais pas sorti le fichier System.php... il me semble inutile et hors sujet de montrer un autoload

  8. #8
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par patouche Voir le message
    Et bien l'idée est assez simple, je stocke cela dans des dossier que je défini moi-même (session_save_path)
    Etc...
    Bien je crois que ce n'est pas la peine d' y passer plus de temps.
    je notes que tu a réinventer les sessions , mais ne jouons pas sur les mots.

    Quand aux cookies, je me demandes même si tu regarderais pas ça dans ton temporary internet au lieu de ton répertoire cookies.

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    Bien je crois que ce n'est pas la peine d' y passer plus de temps.
    je notes que tu a réinventer les sessions , mais ne jouons pas sur les mots.

    Quand aux cookies, je me demandes même si tu regarderais pas ça dans ton temporary internet au lieu de ton répertoire cookies.
    Sans vouloir chercher à jouer sur les mots, je ne comprends pas ce que tu cherches à me dire... Comment ça "réinventé" ?? Il me semble juste à chercher à les utiliser (peut-être) légèrement différemment que son utilisation traditionnel... Ou alors peut-être que je cherche juste à les utiliser pour satisfaire l'un de mes besoins. Quelle est le mal à cela ?? Je ne crois pas avoir eu la prétention de dire que j'ai réinventé les sessions...

    Pour les cookies, désolé de te le dire mais je n'ai ni répertoire temporay internet ni répertoire cookies. Par contre, je les ai lu dans le fichier /home/...../.mozilla/firefox/cookies.sqlite. N'est ce pas là que ce situe les cookies sont stockés sur firefox 3.0.10 ?? Il me semble que tu parles d'internet explorerCe que je ne comprend pas dans ce cas là c'est pourquoi est ce que mes tests unitaires fonctionne-t-il ?? Peut-être pourrait tu m'expliquer ?

    Enfin, au final, tout cela pour dire que le système répond à mes besoins. Cela marche aussi de page en page.

    Si quelqu'un souhaite avoir le code, je le posterais.


    Cordialement,
    Patouche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2010, 01h19
  2. Faire cohabiter plusieurs versions de python
    Par Samuelg dans le forum Déploiement/Installation
    Réponses: 5
    Dernier message: 24/06/2009, 23h05
  3. [Lazarus] Faire cohabiter plusieurs installations de Lazarus
    Par bidibulle dans le forum Lazarus
    Réponses: 2
    Dernier message: 19/02/2009, 08h44
  4. [Framework] [Core] Faire cohabiter plusieurs applicationContext.xml
    Par Yux dans le forum Spring
    Réponses: 6
    Dernier message: 16/01/2009, 13h02
  5. Faire cohabiter plusieurs versions du framework ?
    Par Bleuarff dans le forum EDI/Outils
    Réponses: 3
    Dernier message: 14/03/2007, 16h31

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