2010-12-13 44 views
6

En naviguant sur le réseau social Facebook, je vois que je peux ouvrir 2 comptes (1 dans Firefox et l'autre dans Internet Explorer), ou peut-être plusieurs comptes. Ce n'est pas si bon de savoir que la politique de Facebook permet seulement d'ouvrir une session en même temps.Comment éviter une session

Lors du démarrage d'une session, comment empêcher la même session (compte tenu du nom de la session $_SESSION['user']) d'être rouverte dans un autre navigateur (Internet Explorer/Safari/Opera ...)?

Sinon, comment puis-je savoir (avec PHP) qu'une certaine session est ouverte dans tous les navigateurs pour éviter que la session soit ouverte deux fois?

+2

Stockez l'adresse IP de l'utilisateur et, le cas échéant, vérifiez l'adresse IP. –

+4

La première chose qui me vient à l'esprit est d'avoir un drapeau booléen 'LoggedIn' dans la table des utilisateurs. – Ben

+0

@Rocket, merci +1, je n'y ai jamais pensé, mais l'adresse IP semble plus difficile à avoir que la réponse de Ben, ben ben, c'est un moyen utile (je vais l'utiliser +1): merci à tous ! – SmootQ

Répondre

2
$token = hash('sha256', rand() . microtime() . $_SERVER['REMOTE_ADDR']) // rand as possible 
$_SERVER['user'] = $token; 
+1

Je suis désolé mais je ne comprends pas très bien ce code, est-ce une variable de serveur? – SmootQ

+0

Okey, créant une variable de serveur qui prendra le nom d'utilisateur, non? – SmootQ

+1

J'ai déjà utilisé cette approche. Fondamentalement, lorsque l'utilisateur se connecte, créer une variable de serveur appelée "user_" + son nom d'utilisateur (ex: "user_simotaqi" .Ceci a une valeur basée, entre autres, sur l'heure de connexion.Enregistrer également dans la session de l'utilisateur. –

1

Au lieu de une nouvelle empêchent la session d'être ouvert dans un nouveau navigateur s'il y a déjà une session ouverte ailleurs, tenez compte toutes les sessions invalidant existantes à ce compte utilisateur lorsqu'un nouveau Connexion se produit. Cela minimisera la frustration de l'utilisateur et est simple à mettre en œuvre.

+0

merci de me rappeler de ce problème, je vais vérifier dans l'autre navigateur si le champ de la base de données de l'utilisateur (logedIn) déjà = oui alors je vais passer cet ID utilisateur à la session, merci +1 – SmootQ

+0

@Simo - Mais cela semble peu fiable. Je voudrais simplement tuer/effacer toutes les données de session (pour cet utilisateur particulier) quand une connexion se produit, et créer de nouvelles données de session pour la dernière connexion. – karim79

+0

mais si vous tuez/effacez toutes les données de session pour un utilisateur lorsqu'il se connecte et créez de nouvelles données de session, cette session sera uniquement ouverte dans le dernier navigateur utilisé lors de la connexion – SmootQ