Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/05/2007, 13h02   #1
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
Par défaut [Sécurité] interdire l'ouverture de 2 sessions simultanée d'un compte

Bonjour à toute l'équipe,

j'ai un petit problème, je souhaite interdire l'ouverture simultanée de deux sessions du même compte. j'ai prévu alors une table Tsession là où je stockerai l'ID de l'utilisateur et la date/heure connexion et puis après la date/ heure de déconnexion.

le problème qui se pose maintenant c'est : si l'utilisateur ferme son browser sans avoir être déconnecté je n'ai pas moyen d'écrire dans la base de données l'heure de déconnexion donc bug à la prochaine connexion du même utilisateur qui sera considéré comme toujours connecté !!

quelqu'un aurait une solution à me proposer ? moi j'ai pensé à désactiver/cacher le bouton "fermeture" du navigateur, ce qui semble impossible sauf si on me prouve le contraire.

Merci d'avance a tout le monde.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 14h00   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Quel est l'intéret fonctionnel d'empecher l'ouverture de deux connexions pour un meme compte ?

Sinon je confirme, tu ne peux pas cacher le bouton fermeture du navigateur... encore heureux ! Et quand bien meme c'était possible tu peux pas empecher la panne de courant
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 14h13   #3
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
salut Mr N,

Merci pour ta réactivité et pour ton aide. sinon j'aimerai empêcher la connexion simultanée du même compte pour des raisons de sécurité.

t'as raison ça m'aurais étonné si Microsoft nous aurait permi ceci . Sinon y aurait-il un moyen de détecter cet évenement ( fermeture du browser) , mieux encore , de détécter la destruction de la session comme ce que l'on trouve en .Net ( la procédure session_end() ) ??

merci encore une fois.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 14h20   #4
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 424
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 424
Points : 2 811
Points : 2 811
je ne comprends pas
il n'y a pas deux sessions

si ton utilisateur ferme son navigateur et le réouvre la session est perdue. il en ouvre donc une autre.

s'il ferme sa fenêtre mais pas son navigateur et qu'il la réouvre il est toujours dans la même session.

si ton problème est de savoir si ton utilisateur doit s'authentifier c'est simple s'il a une session il est déjà connu et ne doit pas s'authentifier. tu peux ajouter la condition la session existe et ne contient pas de déconnexion.

mais jamais il peut y avoir deux sessions

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 14h23   #5
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par loukili81
Merci pour ta réactivité et pour ton aide. sinon j'aimerai empêcher la connexion simultanée du même compte pour des raisons de sécurité.
Mais encore ? Je ne vois pas le problème...
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 14h36   #6
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Tu peux éventuellement mettre un timeout sur ta table : si la session est ouverte depuis plus de 5 minutes sans action, tu vides la table.

Sinon tu parcours l'ensemble des sessions lors de la connexion, et tu vérifies que l'utilisateur n'est pas déjà présent (en adaptant la durée des sessions à ton besoin).

Ou encore, 3ème solution, en cas de coupure de courant ou autre, l'utilisateur peut demander un reset de toutes les sessions qui lui sont reliées. Mais ça permettrait à un 2è utilisateur avec les identifiants de remplacer manu militari le premier.

Citation:
Envoyé par loukili81
Bonjour à toute l'équipe,

j'ai un petit problème, je souhaite interdire l'ouverture simultanée de deux sessions du même compte. j'ai prévu alors une table Tsession là où je stockerai l'ID de l'utilisateur et la date/heure connexion et puis après la date/ heure de déconnexion.

le problème qui se pose maintenant c'est : si l'utilisateur ferme son browser sans avoir être déconnecté je n'ai pas moyen d'écrire dans la base de données l'heure de déconnexion donc bug à la prochaine connexion du même utilisateur qui sera considéré comme toujours connecté !!

quelqu'un aurait une solution à me proposer ? moi j'ai pensé à désactiver/cacher le bouton "fermeture" du navigateur, ce qui semble impossible sauf si on me prouve le contraire.

Merci d'avance a tout le monde.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 20h18   #7
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
je réexplique mon problème à ceux qui le voient pas encore ( guidav lui je pense qu'il a compris ). en effet, le problème n'est pas un problème de session qui n'est pas détruite à la fermeture de ma fenêtre.

quand un user s'authentifie, j'écris dans ma table ( Tconnexion par exemple) la date et heure de connection. si le même user veut se connecter simultanément depuis un autre poste avec son compte, je devrai refuser l'ouverture de la 2ème session car une session est ouverte et non encore fermée( date et heure fermeture connexion non encore renseignée dans ma BDD).

imaginons maintenant que mon user ne se déconnecte pas et qu'il se contente de fermer sa fenêtre. mes variables de sessions seront détruites , je le sais, mais à sa prochaine connexion il sera interdit d'accès puisque considéré comme connecté ( vu que dans ma BDD j'aurais pas écrit les infos concernant sa déconnexion).

j'espère que c'est plus claire là.

sinon pour ta réponse guidav

Citation:
Tu peux éventuellement mettre un timeout sur ta table : si la session est ouverte depuis plus de 5 minutes sans action, tu vides la table.
quand tu dis sans action ça veut bien dire que l'utilisateur reste inactif ? si c'est le cas, est ce que ceci restera valable quand le user ferme sa fenêtre ? bon je vais devoir tester peu être...
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 07h37   #8
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Quel est le problème de sécurité soulevé par le fait d'avoir deux connexions différentes sur un même compte ?
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 08h03   #9
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
Je ne vois pas vraiment le probleme non plus.

Tu peux stocker le session id dans la table user pour chaque utilisateur lors de la connexion et verifier a chaque page que le session_id en cours correspond a celui dans la table, si c faux tu deconnecte l'utilisateur.
http://hk2.php.net/manual/en/function.session-id.php
__________________
If it's not broken, don't fix it.
BiliBa Built on top of Zend Framework
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 11h47   #10
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 424
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 424
Points : 2 811
Points : 2 811
je ne vois pas non plus car il ne peut pas y avoir deux connexion dans ce cas

soit le client à fermé son navigateur et la session est close

soit il ne l'a pas fermé et il est toujours connecté à sa session

je ne vois vraiment pas ce qu'il y a d'anormal à ça.

la connexion étant fermé à chaque page il est normal que lorsque le client reviens sans avoir fermé son navigateur il retrouve sa session

à la rigueur mettre un délai qui dit que la session expire au bout d'un certain temps d'inactivité. mais à part emmerder le client ça n'ajoute pas de sécurité.

pour moi si la session est ouverte et que le client arrive sur la page de login
deux solution soit tu ferme la session en cour et tu lui présente le formulaire de login
soit tu lui envois un message comme quoi il est déjà connecté.
et c'est tout

pour l'accès à toutes les autres page à partir du moment où le gars à une sessions c'est juste une question de permissions à gérer

A+JYT
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 16h40   #11
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
Citation:
je ne vois pas non plus car il ne peut pas y avoir deux connexion dans ce cas :
- soit le client à fermé son navigateur et la session est close
- soit il ne l'a pas fermé et il est toujours connecté à sa session
je ne vois vraiment pas ce qu'il y a d'anormal à ça.
je suis tout à fait d'accord que ceci n'a rien d'anormal et c'est pas ça mon problème. je réexplique :

Etape1 :
- mon user A arrive. il saisit son login et password
- login et password corrects + aucune connexion en cours pour ce user (lecture depuis ma table TConnexion)
- Ouverture session X. je stocke dans ma table TConnexion : idUser (A) + datetime ouverture session.

Etape2
- mon user A se déconnecte, je détruit sa session et stocke dans ma table TConnexion la dateTime fermeture connexion.

c'est bon jusque là ?

Etape 2'
imaginons maintenant que user A ne se déconnecte pas mais se contente de fermer sa fenêtre (destruction automatiques des données session).

Etape 3
le lendemain quand user A arrive. il tape son login et password, je verifie si aucune connexion n'est ouverte et à l'état en cours pour ce user -> une connexion est en cours ( la dernière fois ,Etape 2', j'ai pas eu le temps de'écrire le datetime fin de connexion), je désactive l'accès !!

Vous voyez mon problème maintenant ?? il le faut en tout cas car je ne peux expliquer d'avantage
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 17h24   #12
Candidat au titre de Membre du Club
 
Inscription : mars 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 30
Points : 12
Points : 12
En fait c'est pas que l'on ne comprend pas ton probleme mais on ne saisi pas vraiment l'utilité d'une tel procedure. A quoi peut bien te servir d'interdire 2 sessions simultanée pour un meme utilisateur?

A la limite, a ton etape 3 si a la reconenction, il ne correspond aucune fin de session a ton debut de session inscrit dans ta DB, ferme la premiere session, vide la session antérieur de ton utilisateur si t'a encore d'autre chose stocké en dur dans ta DB, et creer en lui une tout neuve
Okena est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 21h20   #13
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 424
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 424
Points : 2 811
Points : 2 811
Citation:
Envoyé par loukili81

je suis tout à fait d'accord que ceci n'a rien d'anormal et c'est pas ça mon problème. je réexplique :

Etape1 :
- mon user A arrive. il saisit son login et password
- login et password corrects + aucune connexion en cours pour ce user (lecture depuis ma table TConnexion)
- Ouverture session X. je stocke dans ma table TConnexion : idUser (A) + datetime ouverture session.

Etape2
- mon user A se déconnecte, je détruit sa session et stocke dans ma table TConnexion la dateTime fermeture connexion.

c'est bon jusque là ?

Etape 2'
imaginons maintenant que user A ne se déconnecte pas mais se contente de fermer sa fenêtre (destruction automatiques des données session).

Etape 3
le lendemain quand user A arrive. il tape son login et password, je verifie si aucune connexion n'est ouverte et à l'état en cours pour ce user -> une connexion est en cours ( la dernière fois ,Etape 2', j'ai pas eu le temps de'écrire le datetime fin de connexion), je désactive l'accès !!

Vous voyez mon problème maintenant ?? il le faut en tout cas car je ne peux expliquer d'avantage
ben c'est simple tu regarde sa session ($_SESSION) et s'il est connecté tu n'ovre rien à l'étape 4 car il n'a pas fermé sa session il est donc toujours connecté et tu l'avertit

soit il c'est effectivement barré et il n'y a rien dans sa session ($_SESSION) au quel cas tu ferme la vielle et tu en ouvre une autre

si tu veux darder la trace de l'heure de fermeture à chaque transaction tu mets l'heure dans son enregistrement TConnexion

ainsi tu as toujours l'heure de la dernière action faite. donc lorsque tu ferme après coup la fiche TConnexion resté ouverte tu as l'heure à laquelle il c'est barré.

A+jyt
sekaijin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 14h40   #14
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
Bonjour,

Merci à tout le monde d'avoir pensé à mon sujet. mais ça ne répond toujours pas à mon besoin.
Citation:
ben c'est simple tu regarde sa session ($_SESSION) et s'il est connecté tu n'ovre rien à l'étape 4 car il n'a pas fermé sa session il est donc toujours connecté et tu l'avertit

soit il c'est effectivement barré et il n'y a rien dans sa session ($_SESSION) au quel cas tu ferme la vielle et tu en ouvre une autre
si je déconnecte et que je reconnecte , je risque de déconnecté la bonne personne et de donner accès à une personne non autorisée...

bon courage à tous.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 17h42   #15
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Tu ne nous as toujours pas expliqué en quoi le fait d'avoir deux sessions d'ouvertes en même temps pose un problème de sécurité.

Personnelement je pense que c'est un faux besoin et donc tu perds ton temps et ton argent sur un problème qui n'en est pas un.
Exemple perso: au boulot je consulte mes mails persos sur un webmail. Je ne ferme ni ma fenetre, ni mon pc. Je rentre le soir, je consulte mon webmail. Je reviens au boulot le lendemain, je consulte mon webmail, sans avoir rien à faire à part peut-etre [refresh] sur le browser... A un moment donné, il y a eu 2 sessions d'ouvertes pour un meme utilisateur. Où était le problème ?
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 17h52   #16
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Exemple tout bete :

Tu offres la possibilité a un utilisateur de regarder des vidéos avec un abonnement a usage unique. Tu veux interdire à l'utilisateur de passer son login/mdp a ses amis pour qu'ils regardent des vidéos en meme temps sur le meme compte.

Je suppose que c'est ce genre de situation que loukili81 rencontre : Comment savoir si quand qqn se connecte sur le site (et donc n'a pas de session d'ouverte, navigateur tout frais etc) c'est la bonne personne (et donc qu'il a simplement oublié de fermer son navigateur avant) ou un de ses copains qui profitent du login/mdp?

Et j'aurai tendance a dire que tu peux stocker dans ta base un identifiant de la session ainsi que la date a laquelle tu l'as ouverte cette dite session. Quand quelqu'un essaie de se connecter au site, qu'une session a déjà été ouverte avant (mais ca n'est pas la meme) tu regardes la date a laquelle cette session a été ouverte, si ca fait 5 heures tu te dis que ca n'est pas genant, si ca fait 30 secondes tu te dis que ca n'est pas la meme personne et que ca n'est donc pas normal.
De la meme maniere tu peux aussi dire "d'accord cette session devient la bonne", et interdire la connexion de l'autre session (en verifiant non pas que la session existe dans tes pages, mais que c'est la "bonne session").

J'espère avoir été compréhensible!
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 19h22   #17
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
alors je pense que tu devrais fermé ton bureau si tu souhaite que personne ne puisse lire tes message perso Mr N

bon koopajah a compris mon problème.pourquoi cette situation posera t-elle un problème de sécurité ? en effet, disons qu'on m'a demandé de faire ainsi et que j'ai pensé que ça doit être lié à une raison de sécurité.

en tout cas, je pense qu'il y a pas de solution mais plutôt une logique à suivre et à adopter.

je vous remercie tous pour votre collaboration. bien à vous.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 11h32   #18
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Tu peux aussi faire en sorte que lors d'un accès concurrent, le 2è à se connecter ait un message du type "voulez-vous déconnecter l'utilisateur 1" et que l'utilisateur 1 reçoive le cas échéant "vous avez été déconnecté sur demande de l'utilisateur 2". Sinon, il y a toujours la possibilité d'utiliser un identifiant physique (carte securID, dongle USB) ou un certificat, mais les coûts ne sont évidemment pas les mêmes. Ca dépend aussi de l'ampleur de la diffusion envisagée. Si c'est pour ds films, c'est pas raisonnable, si c'est pour accéder à un fichier top secret de l'armée, c'est nécessaire
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 11h50   #19
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 142
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 142
Points : 37
Points : 37
oui guidav c'est pas mal comme idée, j'avais pensé à quelque chose pareil Merci bcp et bonne journée.
loukili81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 15h54   #20
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par loukili81
alors je pense que tu devrais fermé ton bureau si tu souhaite que personne ne puisse lire tes message perso Mr N
Le fait que je verrouille mon bureau 1) empeche tout accès à celui-ci par des personnes non autorisé 2) ne ferme pas mes sessions


"on m'a demandé de faire ainsi " n'est pas un argument pour moi

guidav a proposé une bonne solution pour le problème de koopajah
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h11.


 
 
 
 
Partenaires

Hébergement Web