2010-08-23 21 views
0

J'ai une application qui se trouve sur la machine A (solaris.example.com) et les mêmes applications se trouve sur la machine B (rhodes.example.com), ces deux machines sont connectées à la même Base de données MYSQL qui contient une table de session.PHP: Partage de session basé sur MYSQL sur une machine différente

J'ai implémenté mon propre gestionnaire de session afin qu'il enregistre dans la base de données au lieu de l'enregistrer dans les fichiers et cela fonctionne très bien.

Ma question est, comment puis-je accéder à un identifiant de session exact qui est créé sur la machine A à partir de la machine B?

Je ces configuration sur mon script d'initialisation pour les deux machines:

ini_set("session.gc_maxlifetime", "288000"); 
ini_set("session.cookie_lifetime", "288000"); 
ini_set("session.save_handler", "user"); 
session_set_cookie_params(0, "/", ".example.com", false, false); 
session_cache_expire(288000); 

Le problème que je reçois est que la machine B continue de créer une nouvelle session sur la table et quand j'ai essayé de mettre la session ID sur la machine B en utilisant session_id($_GET["sessId"]) il remplace la valeur qui a été créée par la machine A.

La question est, comment puis-je dire à la machine B d'utiliser l'ID de session créé par la machine A et obtenir les données de la table ?

Je pensais que cela va être automatique depuis que je l'ai appelé session_set_cookie_params(0, "/", ".example.com", false, false);

Toute aide serait fantastique

+0

Comment spécifiez-vous votre gestionnaire de sauvegarde de session personnalisé? – Gumbo

+0

http://pastebin.ca/1923277 – gumpi

+0

Avez-vous vérifié le cookie créé comme vous le voulez? Avez-vous vérifié si les en-têtes de cookie envoyés correspondent au cookie que vous souhaitez recevoir? – Jasper

Répondre

0

je serais en train d'enregistrer un cookie sur la machine des utilisateurs afin que je puisse facilement déterminer si son/sa session est existante ou non. Bien sûr, si l'utilisateur a désactivé les cookies, cela ne fonctionnera pas.

Vous pouvez stocker un certain type de données significatives en fonction de l'utilisateur ip/etc, puis vous pouvez identifier l'utilisateur en fonction de ces données. Note: cette solution ne fonctionne que lorsque vous pouvez identifier exactement l'utilisateur. Sinon, vous pouvez donner la session d'un autre utilisateur à l'utilisateur actuel.

Modifier J'ai trouvé un link sur SO, peut-être que cela aidera.

0

Il n'y a rien de manifestement faux dans votre approche, en supposant que l'on accède aux deux machines en utilisant le même nom d'hôte dans l'URI côté client.

session_id ($ _GET [ "sessId"])

use_trans_id doit être évitée autant que possible. Les valeurs de cookie ne sont présentes que dans $ _REQUEST (en fonction du paramètre ini de request_order) ou dans $ _COOKIE. Il est certain que s'ils utilisent des noms d'hôte différents sur le client, vous devrez remplir l'ID de session vous-même - PHP ne le fera probablement pas pour vous. L'utilisation de cookies est une approche beaucoup plus sensée et simplifie grandement les choses.

Vous devez vérifier si l'ID de session créé sur l'ordinateur A est réellement présenté à l'ordinateur B (en tant que cookie ou dans l'URL). Si c'est le cas, alors quelque chose de très inhabituel se passe.

+0

vérifiez cette URL: http://pastebin.ca/1923277 – gumpi

+0

Désolé de ne pas avoir le temps de faire des critiques de code gratuit - et il ne répond pas aux questions que je vous ai suggéré d'adresser. – symcbean