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 $_SESSION identique à plusieurs utilisateurs


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Variable $_SESSION identique à plusieurs utilisateurs
    Bonjour,

    Dans le cadre d'une application en intranet pour un call center, les employés de celui-ci travaillent sur des campagnes (série de cibles à appeler).

    Lors du traitement de ces campagnes par les employés, les appels sont effectués en automatique et les données de la cible appelée sont affichées. Pour une campagne donnée, la cible peut être appelée plusieurs fois jusqu'au moment où le suivi de celle-ci pour cette campagne est clôturé.

    Afin d'éviter que deux agents ne travaillent sur le même suivi, l'enregistrement (dans la base de données) du suivi en cours de traitement est marqué comme étant occupé.

    Pour une persistance de l'objet suivi d'un script à l'autre, il est passé à la variable de session ($_SESSION). Apparemment, j'aurais un souci quant à la différenciation de la variable $_SESSION qu'il devrait y avoir entre deux utilisateurs différents car il arrive que le même suivi soit chargé en même temps par deux utilisateurs différents. Lors de mes tests, j'ai apperçu que le suivi est bien mis en occupé lors de son chargement par un premier utilisateur, mais que celui-ci est remis en non occupé lors du travail sur la même campagne par un autre utilisateur alors que le premier utilisateur travaille toujours sur le suivi en question.

    Voici mes différentes codes :

    - dans ma classe de génération des interfaces (pour la création du menu) :
    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
    ...
     
    if($objUtilisateur->getGroupe() == 2)
         {
          $tabFichiers = array("accueil.inc", "listeCampagnes.inc", "enregUtilisateur.inc", "rechUtilisateur.inc", "enregCible.inc", "rechCible.inc", "creatForm/page2.inc", "modifCampagne.inc", "listeRapports.inc", "paramGeneraux.inc", "parametres.inc", "changePassword.inc", "sauvegarde.inc");
    	    $tabTitres = array ("Accueil", "Liste des campagnes", "Enregistrer un utilisateur", "Modifier données utilisateur", "Enregistrer client", "Modifier client", "Créer campagne", "Modifier campagne", "Rapports", "Paramètres généraux", "Structure xls", "Modifier mot de passe", "Sauvegarde");
          $menu = array("Accueil", "Campagnes", "Enregistrer un utilisateur",  "Modifier utilisateur", "Enregistrer client", "Modifier client", "Créer campagne", "Modifier campagne", "Rapports", "Paramètres généraux", "Structure xls", "Modifier mot de passe", "Sauvegarde");
         }
        else
         {
          $tabFichiers = array("accueil.inc", "listeCampagnes.inc", "enregCible.inc", "listeRapports.inc", "changePassword.inc");
    	    $tabTitres = array ("Accueil", "Liste des campagnes", "Enregistrer client", "Rapports", "Modifier mot de passe");
          $menu = array("Accueil", "Campagnes", "Enregistrer client", "Rapports", "Modifier mot de passe");
         }
     
    ...
     
    if($menu[$cpt] != 'Créer campagne' || ($menu[$cpt] == 'Créer campagne' && $paramXls))
               {
                echo "           <a href=\"javascript:detruireSession('" . $debLien . $lienFichier;
     
    		        echo $tabFichiers[$cpt] . $lienTitre . $tabTitres[$cpt] . "')\">" . $menu[$cpt] . "</a>
    	                 </td>
    	                </tr>";
    	         }
    - ma fonction Ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function detruireSession(url)
     {
      xhrDetruireSession=getXhr();
       xhrDetruireSession.onreadystatechange = function()
        {
         if(xhrDetruireSession.readyState == 4 && xhrDetruireSession.status == 200)
          window.location.replace(url);
        }
      xhrDetruireSession.open("POST",'../transferts/detruireSession.php',true);
      xhrDetruireSession.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      xhrDetruireSession.send("url=" + url);  
     }
    - mon script Php :

    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
    <?php
    include_once("../fichiersInclusion/classes.php");
    @session_start();
     
    if(!empty($_SESSION['suivi']))
     {
      if(get_magic_quotes_gpc()) //test si les magic_quotes sont activées
       $objSuivi = unserialize(stripslashes($_SESSION['suivi']));
      else
       $objSuivi = unserialize($_SESSION['suivi']);
     
      if($objSuivi->getOccupe() == 1)
       $objSuivi->setOccupe(0); // Pour libérer le suivi
     }
     
    session_destroy();
    ?>
    Se pourrait-il que la variable $_SESSION du second utilisateur soit identique à celle du premier?

    Merci d'avance pour vos réponses

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Points : 109
    Points
    109
    Par défaut
    Salut, à ma connaissance, la variable $_SESSION est propre à chaque utilisateur, donc différente d'un utilisateur à l'autre.
    Pour le suivi, peut-être que tu devrais mettre ds une table, un champs qui sera mis à jour chaque fois que quelqu'un travaille sur une campagne?

    Alpha.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    C'est bien ce que je fais...

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    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 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Se pourrait-il que la variable $_SESSION du second utilisateur soit identique à celle du premier?
    Le suivi de la session est effectué par un cookie propre à chaque navigateur, et donc utilisateur final. Normalement chaque $_SESSION est unique.
    Ceci dit : attention aux accès concurrents à ta BdD, attention s'il y a un proxy entre tes utilisateurs et le serveur web, cela peut mettre la pagaille dans les cookies et les sessions par extension.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       $objSuivi->setOccupe(0);

    La fonction setOccupe doit mettre à jour un Flag (une colonne qui prendra la valeur 0 ou 1) dans la table concernée.

    Si une autre demande sur la même compagne est exécutée normalement il y a la vérification de ce Flag dans la table elle même.

    Dans le cas où le Flag = 0 alors la compagne est chargée (et on mit a jour le Flag par la valeur 1)

    Dans le cas où le Flag = 1 alors refus car déjà chargé par un autre utilisateur

  6. #6
    Membre éprouvé 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
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par alpha232 Voir le message
    Salut, à ma connaissance, la variable $_SESSION est propre à chaque utilisateur, donc différente d'un utilisateur à l'autre.
    Pour le suivi, peut-être que tu devrais mettre ds une table, un champs qui sera mis à jour chaque fois que quelqu'un travaille sur une campagne?

    Alpha.
    Bonjour

    Faux !
    Lorsqu'une session est itinitiée, elle peut parfaitement comprendre des variables de sessions personnelles...et communes.
    1- Celles associées à l'identifié lui-même.
    2- Celles associés à un groupe (par exemple) et commune à tous.

    Ce qui est particulièrement pratique pour une applic en mode collaboratif.
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Points : 109
    Points
    109
    Par défaut
    C'est une fonctionnalité qui m'intéresse. Comment peut-on déclarer et utiliser des variables de sessions communes à un certain nombre d'utilisateur?

    Alpha.

  8. #8
    Membre éprouvé 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
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par alpha232 Voir le message
    C'est une fonctionnalité qui m'intéresse. Comment peut-on déclarer et utiliser des variables de sessions communes à un certain nombre d'utilisateur?
    Alpha.
    Salut
    Ok, je vais développer plus en détail.

    Prenons l'exemple d'une secrétaire (Sylvie) qui est chargée de remplir les devis de ses différents collaborateurs quand ils sont absents.

    Une table sql pourrait comprendre les champs suivants :
    user groupe droit
    Sylvie A1 1
    Pierre A1 2
    Jean A1 2
    Paul A1 3
    Jules Z1 1
    Michel Z1 2
    Sylvie se connecte et s'identifie.
    Si valide, on initie une session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION['user'] = $user;
    $_SESSION['groupe'] = $groupe;
    $_SESSION['droit'] = $droit;
    Dans ce cas de figure, tu pourras observer que la variable groupe A1 est mise en session.
    1 - Puisque nous avons accés à cette variable A1, une simple requête suffit pour afficher (dans une liste déroulante
    par exemple), les noms des différents collaborateurs de ce groupe A1.
    On est ok ?

    2 - Puisque nous avons accés à ces variables user, on peut donc accéder à leur espace de travail respectif.
    Et cela en cliquant directement sur le nom du collaborateur.

    Dans ce cas là, on écrase l'ancienne session en initiant une nouvelle, tout simplement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['user'] = $user;
    Dans ce cas de figure, Sylvie n'est plus sur son espace de travail, mais sur celui d'un de ses collaborateurs.
    Remarque, seulement du groupe A1, et non pas Z1.


    On peut aller bien plus loin dans la conception, on peut tout aussi bien donner des droits en fonction des utilisateurs, puisque nous connaissons aussi la variable de session droit.
    Pour cela, suffit de jongler avec les conditions dans les scripts.

    Dans l'exemple, Sylvie dispose du droit 1, qui l'autorise à accéder à tous les espaces d'un même groupe.
    Pour Pierre et Jean, c'est différent.
    Pour Paul, c'est encore différent.


    Voilà, bon, c'est un simple exemple, mais sur cette base de réflexion, les possibilités sont illi-mi-tées.
    Le plus important, est de bien déterminer au départ, le schéma de fonctionnement.
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

Discussions similaires

  1. variable globale pour plusieurs Form
    Par ced2004 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/04/2005, 08h50
  2. partager un schema entre plusieurs utilisateurs
    Par jrman dans le forum Oracle
    Réponses: 5
    Dernier message: 15/12/2004, 16h53
  3. Réponses: 4
    Dernier message: 14/10/2004, 17h36
  4. [VB.NET] Variable visible dans plusieurs fonctions ?
    Par Webman dans le forum ASP.NET
    Réponses: 2
    Dernier message: 19/05/2004, 17h36
  5. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22

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