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 :

[Sessions] Les sessions multi-applications


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 18
    Points : 16
    Points
    16
    Par défaut [Sessions] Les sessions multi-applications
    Bonjour,

    Nous avons deux applications ayant chacune une database et installées sur un même serveur. Elles nécessitent que les utilisateurs s'identifient pour y avoir droit. Pour cela nous utilisons des sessions qui sont stockées dans chacune des databases en usant de la directive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
    Pour des raisons du mutualisation, il est souhaitable d'avoir toutes les variables de sessions stockées dans une database tiers de telle façon que l'utilisateur ne renseigne qu'une fois ses infos de connexion pour accéder aux deux applications citées ci-haut.


    Quelqu'un a-t-il déjà rencontré cette problématique ? et si une solution à été apportée, pourrait-il nous la faire partager?

    En fait on peut envisager un scenarii du genre:

    1)le user se connecte via une interface, la session est stockée dans une database A
    2)si la connexion est ok, il est redirigé sur l’une des deux applications


    Pour indication : les deux applications ont le même non de session.


    Cordialement,

  2. #2
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Je vais ajouter quelques précisions pour éclaircir le problème:
    Pour l'application 1:
    -stockée dans une db B avec une table utilisateur nommée b_users.

    Pour l'application 2
    -stockée dans une db C avec une table utilisateur nommée c_users.

    La structure des tables b_users et c_users est la même et contient les mêmes données (non_users, prenom_users, password_users,ect...).

    Chaque application possède une interface de connexion utilisateur.

    Voici la fonction permettant de personnaliser la gestion des sessions pour chacune de ces applications: Par soucis de simplifer seul la fonction de l'application 1 est jointe.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
      if (STORE_SESSIONS == 'mysql')
      {
    		if (!$SESS_LIFE = get_cfg_var('session.gc_maxlifetime')) $SESS_LIFE = 1440;
     
        	function _sess_open($save_path, $session_name) {
          		return true;
        	}
     
        	function _sess_close() {
          		return true;
        	}
     
        	function _sess_read($key) 
    		{
          		$qid = tep_db_query("select value from b_sessions  where sesskey = '" . tep_db_input($key) . "' and expiry > '" . time() . "'");
     
          		$value = tep_db_fetch_array($qid);
          		if ($value['value']) return $value['value'];
     
          		return false;
        	}
     
        	function _sess_write($key, $val) 
    		{
          		global $SESS_LIFE;
     
          		$expiry = time() + $SESS_LIFE;
          		$value = $val;
     
          		$qid = tep_db_query("select count(*) as total from b_sessions where sesskey = '" . tep_db_input($key) . "'");
          		$total = tep_db_fetch_array($qid);
     
          		if ($total['total'] > 0) return tep_db_query("update b_sessions set expiry = '" . tep_db_input($expiry) . "', value = '" . tep_db_input($value) . "' where sesskey = '" . tep_db_input($key) . "'");
    			else return tep_db_query("insert into b_sessions values ('" . tep_db_input($key) . "', '" . tep_db_input($expiry) . "', '" . tep_db_input($value) . "')");
        	}
     
        	function _sess_destroy($key) {
          		return tep_db_query("delete from b_sessions where sesskey = '" . tep_db_input($key) . "'");
        	}
     
        	function _sess_gc($maxlifetime) {
          		tep_db_query("delete from b_sessions where expiry < '" . time() . "'");
     
          		return true;
        	}
     
        	session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
      }
     
      Structure des tables des sessions
     b_sessions 
     (
      sesskey varchar(32) NOT NULL,
      expiry int(11) unsigned NOT NULL,
      value text NOT NULL,
      PRIMARY KEY (sesskey)
     )
     
     c_sessions 
     (
      sesskey varchar(32) NOT NULL,
      expiry int(11) unsigned NOT NULL,
      value text NOT NULL,
      PRIMARY KEY (sesskey)
     )
    Voilà pour l'existant. Nous n'avouns pas de soucis avec cette fonction, elle bien les sessions pour chacune de ces applications.

    Maintenant ce que nous voulons faire est de créer une nouvelle db avec une table utilisateur a_users qui contiendra les données des tables utilisateurs b_users et c_users de façon à avoir une table unique pour tous les utilisateurs.

    Nous avons déjà créer une interface unique pour se connecter aux applications 1 et 2 ainsi que la même fonction appliquée à la table a_sessions ayant la même structure que b_sessions et c_sessions.

    Comment faire pour que le user x qui se connecte via l'interface unique conserve la même session lors de sa navigation dans les deux applications ?

    Nous souhaitons utiliser la routine ci-haut, mais une fois que les informations de connexions fournies par le user x sont validées, une rédirection est faite sur l'appli 1. Mais l'appli 1 ne reconnait pas la variable de session courante.

    Cordialement,

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    La structure des tables b_users et c_users est la même et contient les mêmes données (non_users, prenom_users, password_users,ect...).
    Quel est l'intérêt d'avoir dans ce cas deux tables différentes ?

  4. #4
    Membre actif
    Homme Profil pro
    PDG
    Inscrit en
    Septembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PDG
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2005
    Messages : 101
    Points : 225
    Points
    225
    Par défaut
    Oui, pourquoi ne pas avoir une seule table commune pour gérer les sessions ?
    Ça simplifierait les choses et permettrait de passer d'une application à l'autre sans problème.

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    C'est ce que je viens d'expliquer l'existant fonctionne avec une table session dans chaque application.

    Nous souhaitons mutaliser tout ça dans une même database distincte de ces applis afin de gérer les sessions pour les deux applications.

    Merci pour d'autres idées

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

Discussions similaires

  1. Terminer toutes les sessions Tomcat d'une application Web
    Par Soulama dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 06/11/2011, 22h39
  2. les sessions en dehors des applications web
    Par paonus dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/07/2008, 09h19
  3. Les sessions, les patterns et les transactions.
    Par red210 dans le forum Hibernate
    Réponses: 3
    Dernier message: 22/10/2007, 14h16
  4. Réponses: 3
    Dernier message: 12/05/2006, 12h34
  5. Réponses: 2
    Dernier message: 24/01/2006, 09h41

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