Avoir deux sessions différentes dans le même domaine
- Je exécuter foo.com. J'ai deux applications différentes qui vivent dans foo.com: l'une est foo.com/bar et l'autre est foo.com/example. J'utilise les sessions pour suivre les informations sur l'utilisateur lorsqu'ils sont connectés, mais si l'utilisateur passe de foo.com/bar pour foo.com/example, foo.com/example voit la session de l'utilisateur a commencé à partir de foo.com/bar et utilise cette information. Ma question est, comment puis-je avoir deux sessions de passe pour chaque répertoire en même temps?
Que faire si nous voulons atteindre les mêmes fonctionnalités dans django alimenté projet?
OriginalL'auteur Matthew | 2009-08-28
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser de la même session, mais de changer les noms de variable que vous recherchez.
Edit: Désolé, ce n'est pas la réponse à votre question, mais donne une solution alternative.
Merci Matthieu: n'oubliez pas si cela répond à votre question, n'oubliez pas de le marquer comme "La Réponse":)
La plupart ont voté réponse est mieux - la meilleure façon est d'utiliser des "session_name'.
OriginalL'auteur user103219
Vous devriez appeler session_name avant l'appel à la fonction session_start. Cela définit le nom du cookie utilisé pour identifier la session (par défaut c'est PHPSESSID).
Utiliser un nom différent pour chaque application. Vous ne devriez pas avoir à jouer avec les variables à l'intérieur de la session.
La meilleure solution pour les garder séparés. +1
OriginalL'auteur Craig
Je pense qu'il est très important de mettre en évidence le potentiel des répercussions sur la sécurité associée avec les solutions proposées jusqu'à présent.
J'ai été une application web de testeur de pénétration pour environ 5 ans et ont développé de nombreuses vulnérables applications de sécurité en ce moment pour aider à la formation des juniors de départ à la sécurité des TI.
Je viens de tester les solutions proposées et ont constaté qu'aucune d'entre elles empêchent l'accès à une session appartenant à des voisins de l'application. À l'aide de différents identifiant de session noms avec session_name() ne doit pas empêcher les utilisateurs d'utiliser la valeur de ces identifiants. PHP n'a pas distincts de stockage pour chaque session nom de l'identificateur. J'ai eu deux applications à l'aide de différents noms de session et la définition d'un cookie chemin d'accès pour le navigateur. L'respectives suivantes Set-Cookie directives ont été inclus dans les réponses HTTP:
Si les deux applications, est entièrement distincte des utilisateurs et quelqu'un n'a eu accès à l'
/testtwo/
application, ils peuvent être en mesure d'accéder à des infos sur le/testone/
app fonction de la manière dont les paramètres de session ont été manipulés. Un exemple de segment de code ci-dessous montre un potentiel de violation de données en supposant que les deux applications utilisent un$_SESSION["authenticated"]
paramètre après l'authentification réussie.Pour accéder à cette
$topsecretinfo
on aurait seulement besoin de s'authentifier sur le/testtwo/
application, prendre la valeur de leurTESTTWO
identifiant de session et l'utiliser comme la valeur de laTESTONE
identifiant de session lors de l'envoi de demandes de la/testone/
application. PHP session du processus de recherche ne reconnaît pas le nom de l'identifiant de la session, sauf pour l'analyse de la correspoding valeur. c'est à dire un identifiant de session de la valeur de "agcy648dja6syd8f93" sera de retour le même objet session, quel que soit le nom utilisé pour la désigner.OriginalL'auteur SomeGuy
Vous pouvez être en mesure d'utiliser session_set_cookie_params pour définir le domaine et le dossier de la session d'enregistrement. C'est à dire:
Vous avez besoin d'ajouter de barre oblique de fin de chemin. Sans cela, il ne sera certainement pas de travail.
Si vous avez accès au php.ini vous pouvez essayer le réglage de la session.cookie_path paramètre directement que c'est ce que cette fonction est censé remplacer. Vous pouvez également utiliser la fonction ini_set() si vous n'avez pas accès au php.fichier ini.
OriginalL'auteur Steven Surowiec
Une autre solution est effectivement de créer un espace de noms à l'intérieur de votre session de pré-en attente de toutes les valeurs de session de foo.com/bar avec "bar_" et foo.com/example avec "example_".
La façon dont vous pouvez vous garder d'être fastidieux est d'extraire de cette fonctionnalité dans une fonction ou une méthode de classe. Par exemple:
Ensuite d'obtenir des valeurs d'une fonction de correspondance.
Le principal avantage de cela est que vous n'avez pas à penser à ce que les noms de variables que vous utilisez dans /exemple lors de la programmation dans /bar. L'autre est que si vous décidez de changer la façon dont vous stockez des valeurs de session, vous pouvez facilement changer le tout dans un seul endroit.
OriginalL'auteur
Je réalise que c'est vieux, mais pensé qu'il pourrait aider quelqu'un. Cet exemple montre comment nous en sommes une session séparée pour notre zone d'administration.
OriginalL'auteur Trevor Lettman