2009-02-21 6 views
0

J'ai deux applications, l'une est l'application frontale, l'autre est le backend. Chaque application possède sa propre copie de la base de données utilisateur identique. Lorsqu'un utilisateur se connecte à l'application frontale, je me connecte simultanément à l'application principale en utilisant les services Web fournis par l'application principale.Détruire des variables de session dans une autre application

La question est maintenant est-il possible pour moi de détruire la session backend de l'application front-end? Le backend utilise le tableau super global $ _Session pour stocker toutes les informations de session. Si oui, comment?

Répondre

1

Oui c'est.

Je suppose que vous utilisez le même nom d'ID de session pour l'avant et l'arrière. Je pense que la valeur par défaut est PHP_SESSID. Si c'est le cas, tous les détails de la session seront stockés dans le même emplacement. Je suppose aussi que le domaine de front et back-end est le même .. s'il est différent, alors il ne fonctionnera pas, car les navigateurs Web ne partageront pas les informations de session entre différents domaines.

Si vous utilisez des noms d'ID de session différents pour l'avant et l'arrière, vous devrez vous méfier. (L'ID de session pour les deux sera dans les données de la demande, vous devrez simplement charger les deux sessions et les détruire toutes les deux.)

utilisation:

session_destroy(); 
0

Vous devez supprimer l'enregistrement de session de la base de données ou du fichier (en fonction de la configuration de votre système).

Le système utilise par défaut une session basée sur des fichiers et vous pouvez déterminer le répertoire à l'aide du session_save_path. Il est presque certainement beaucoup plus facile d'utiliser des sessions stockées dans une base de données plutôt que sur le système de fichiers.

0

Si vous pouvez utiliser le service Web exposé par l'application principale pour la connexion d'un utilisateur IN, pourquoi ne pouvez-vous pas l'utiliser également pour déconnecter l'utilisateur OUT? De cette façon, une application n'a pas besoin de savoir comment l'autre implémente des sessions (ou a des privliedges pour se débrouiller là-dedans).

Si ce n'est pas possible, vous devrez faire ce que acrosman suggère, et creuser dans les fichiers de session ou la base de données. Comment reliez-vous les sessions frontales aux sessions dorsales?

+0

Aussi bizarre que cela puisse paraître, le service Web ne couvre que la connexion, mais pas déconnecté. En fait, le backend n'a pas été écrit par moi (il a été écrit par quelqu'un d'autre et je ferais mieux de ne pas le toucher), donc je n'ai pas le choix ici. – Graviton

0

si vous conservez un mappage du nom de la session (valeur unique utilisée comme ID de session) des sessions frontale et principale, vous pouvez facilement trouver la session principale (elle peut être enregistrée dans des fichiers ou dans une base de données), puis supprimer l'enregistrement de la session. utiliser cette ligne pour savoir ce gestionnaire est utilisé pour les fichiers de session de magasin:

$handler = init_get('session.save_handler'); 

vous pouvez utiliser cette ligne pour savoir où les fichiers de session sont stockés:

$path = ini_get('session.save_path'); 

alors vous pouvez supprimer les fichier de session ou enregistrement de base de données.

Vous pouvez également créer une méthode de service Web pour détruire les sessions principales, puis l'appeler depuis le frontal.

0

Si les deux applications se trouvent dans des sous-domaines différents du même domaine, vous pouvez enregistrer un cookie indiquant à l'application d'administration que l'utilisateur est déconnecté. Ensuite, l'application d'administration elle-même supprimer la session et le cookie "déconnecté".

Questions connexes