begin process at 2012 05 30 09:15:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Réseau & Internet

 > 

serveur web HTML : indentification unique d'un client


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

serveur web HTML : indentification unique d'un client

vendredi 19 octobre 2007 à 12:01:10 | serveur web HTML : indentification unique d'un client

steph12358

Bonjour

Dans le cadre u développement d'un petit serveur HTML propriétaire je cherche à identifier de manière unique chaque client connecté pour gérer des "sessions".
Le but est de demander à chaque nouveau client, de s'identifier et de vérifier, lors de ses requètes ultérieures, si le délai d'expiration de la "session" n'a pas expiré.

En résumé : j'ai juste besoin de savoir comment identifier de manière unique chaque client...

J'utilise actuellement "inet_ntoa" juste après "accept"
"
adresse_ip_client = inet_ntoa( maSocket.sin_addr);
"
ce qui me renvoie l'adresse IP du client connecté.

Mais j'ai un soucis car identifier un client par son adresse IP me paraît insuffisant...

- Ca ne marche pas si le client n'a pas d'adresse fixe. Il risque de ne plus être considéré comme loggué lors de l'attribution d'une nouvelle adresse IP temporaire. (c'est peut-être un faux problème, l'adresse est valide, au moins 24h je crois, ça doit dépendre du fournisseur d'accès)

- Plus grave peut-être : ça ne marchera pas si plusieurs clients d'un même réseau consultent à distance le serveur. N'auront-ils pas dans ce cas la même adresse IP ? Et si oui comment les distinguer les uns les autres ?  Bien sùr les sockets ne s'enmèleront pas les pinceaux mais perso j'ai besoin d'un ID unique par client (un client peut "déclencher" plusieurs sockets pour une seule page web si celle-ci contient des images, des sons etc.)

Si qqun a une idée ou a déjà été confronté à cette question ...
toute info bienvenue




vendredi 19 octobre 2007 à 15:01:43 | Re : serveur web HTML : indentification unique d'un client

steph12358

Rebonjour

je vais essayer de faire plus court

Je suis en train de concevoir un petit serveur web HTML en Multithread.
Je sais déjà envoyer les pages demandées par les clients connectés et récupérer l'adresse IP du client connecté avec "inet_ntoa". En réseau local chacun a une adresse différente.

Par contre sur le Net tous les postes ont la même adresse IP "publique"  : celle attribuée pour 24h par notre fournisseur d'accès à ma boite (On passe tous par le même routeur).

Ma question est : le serveur sera distant...
Comment mon futur serveur peut-il faire la différence entre les différents utilisateurs ?

Il doit bien y avoir un moyen puisque chaque client reçoit bien les réponses de ses propres requêtes et pas celles de son voisin de bureau
vendredi 19 octobre 2007 à 15:57:26 | Re : serveur web HTML : indentification unique d'un client

aardman

Membre Club
Salut,
ben quand tu recois une requete depuis un socket, tu renvoies la reponse dans ce même socket, ca me semble logique non ?

vendredi 19 octobre 2007 à 16:13:56 | Re : serveur web HTML : indentification unique d'un client

steph12358

Salut

Oui ça je sais, c'est ce que je fais :

le socket listener écoute, un client A se connecte, j'accepte la connexion, nouveau Socket A attribué au client A : il envoie sa requête, je lui répond, on ferme la connexion : tout baigne puisqu'on parle sur le même socket A.

Si dans un autre thread un client B se connecte ont fait la même chose on parle sur un autre socket B.... etc...

Quand un client demande une page html qui contient un logo, le client ouvre 2 sockets : 1 pour la page, 1 pour l'image, traités simultanément dans 2 threads séparés puis les sockets sont détruits, la connexion fermée.

Imagine : j'ai une page login.html qui me poste des données (en POST ou GET peu importe). Chaque fois qu'un client se loggue je veux mémoriser un ID qui lui est propre... Si un utilisateur se connecte et n'a pas d'ID perso je l'envoi sur le page login.html

C'est ce que je fais en php avec une variable de session...

Comment puis-je faire pour stocker un ID unique pour le client A et un autre pour le client B etc... qui se connectent au serveur distant s'ils utilisent le même routeur (même adresse IP) ? Je ne peux pas utiliser leur adresse IP (ils ont tous la même, celle du routeur)

C'est ça ma question en fait ! (je dois pas être trés clair le week end est proche)




vendredi 19 octobre 2007 à 16:31:30 | Re : serveur web HTML : indentification unique d'un client

aardman

Membre Club
Salut,
Justement, tu n'a pas a faire cette difference puisque c'est au niveau php que tu dois gerer les sessions.
En HTTP (et non html, au passage) un client est representé par son socket et c'est tout. Si tu as deux socket, c'est que tu as deux client, c'est tout ce qui t'interesse (peu importe si ces deux client sont en fait la même machine ou pas, ou deux machines differentes derriere dans le même reseau...).

lundi 22 octobre 2007 à 09:24:58 | Re : serveur web HTML : indentification unique d'un client

steph12358

Bonjour

Serveur HTTP bien sûr, ma langue a fourché (ou plutôt mes doigts). A force de se répéter on finit par se gourer

J'ai déjà précisé dans mon premier message, et rappelé dans les suivants, qu'on m'a demandé d'écrire de toute pièce un serveur Web HTTP gérant des pages statiques un serveur "maison"

Il n'hébergera que des pages HTML.
Donc pas de PHP (ce qui m'obligerait en outre à inclure un module PHP dans mon serveur ce que le client ne veut pas, sinon autant utiliser Apache/Php/Mysql, le triplet gagnant, ce que le chef de projet se refuse à faire, ne me demandez pas pourquoi... La maquette du projet final a d'ailleurs été réalisée en php/mysql par mes soins, faire et défaire c'est toujours travailler).

En gros mon problème : je veux savoir comment pouvoir gérer des cookies serveurs ou variables de session (ce que tout le monde sait faire en php) mais en C++ dans un serveur HTTP multithread écrit à la mimine. Donc pouvoir associer une ou plusieurs variables à chacun des clients connectés au moins une fois.

Le serveur est écrit et stable, manque juste la gestion de cookies serveur avec un temps d'expiration pour obliger les clients connectés à se reloggueur périodiquement
...

"En HTTP (et non html, au passage) un client est representé par son socket et c'est tout. Si tu as deux socket, c'est que tu as deux client, c'est tout ce qui t'interesse (peu importe si ces deux client sont en fait la même machine ou pas, ou deux machines differentes derriere dans le même reseau...)."

et là où je coince c'est que lorsque un client demande une page contenant n liens il peut, s'il s'agit de gros fichiers, utiliser jusqu'à n+1 sockets, traités simultanément et que ces sockets sont refermés et donc perdus dès que le fichier est reçu... Donc il ne me reste que l'adresse IP pour voir, lors d'une autre requête, s'il s'agit d'un client déjà traité... Personne n'a mieux à proposer ?

lundi 22 octobre 2007 à 12:06:26 | Re : serveur web HTML : indentification unique d'un client

steph12358

Bon ben... une idée peut-être alors...

Est-ce qu'un solution ne serait pas tout simplement que le serveur envoie des cookies stockés directement chez chaque client ?

un truc du genre :

"Set-Cookie: Cookie1=123; domain=; expires=\"Mon, 22 Oct 2007 14:00:00 +0000"

envoyé dans l'entête HTTP

Lors du passage sur la page "login.html" l'utilisateur envoit son login et son mot de passe. Le formulaire renvoit sur une page "traite_login.html" par exemple; si l'utilisateur s'est identifié avec succès cette page créé alors un cookie spécifique au client avec une date d'expiration...
Si le cookie n'existe pas on envoit sur la page login.html directement...

La méthode est bonne ?


Cette discussion est classée dans : serveur, client, ip, adresse, unique


Répondre à ce message

Sujets en rapport avec ce message

Récupérer l'adresse IP du client qui se connecte à mon serveur [ par HolyDev ] Bonjour, bon alor j'utilise et VS C++Lorsqu'un client se connecte à mon serveur j'aimerai afficher l'adresse IP de celui-ci après le message FD_ACCEP sockets!!!!!!!!!!!!!!! [ par dletozeun ] bonjour,J'ai encore un probleme avec les sockets:voila, g reussi a faire communiquer un serveur et un client su r 2 ordinateur distant mais cette conn TCP/IP [ par maitrez ] Bonjour à tous,je suis en train de créer une appli client et une appli serveur. L'appli client est un jeu qui représente pour l'instant une petite voi serveur DNS [ par dominoman ] Je dois créer un serveur DNS qui reçoit l'adresse IP de ses clients et qui tient à jour une page html qui affiche au client son nom et son adresse ip. Client/Serveur UDP sur 1 unique machine ! [ par sena ] Bonjour,j'ai fais deux programmes :un client et un serveur UDP.Ceux ci fonctionnent bien quand je les fait communiquer sur 2 machines différentes.Ce q Obtenir le hostname du client [ par Poppuledaimadoshi ] Bonjour, je commence dans la programmation réseau, et j'ai un petit problème. En effet, j'ai commencé un petit programme en C plus plus qui fait serve connection client serveur avec MFC [ par Spiffou ] Bonjour à tous,j'avance petit à petit dans la programmation socket, mais je suis confronté à une nouvelle difficulté et j'ai une ou deux question sans ip du client connecté sur le serveur [ par minet03 ] Coucou, je voulais savoir comment on fesait pour afficher les renseignements du client connecté sur le serveur. J'ai essayé la fonction getpeername() Recuperer ip a partir d'une adresse [ par _Jonathan ] Je cherche a recuperer l'ip d'un serveur (ftp ou http, n'importe)En fait, c'est pour un chat, le client trouve l'ip du serveur(cad mon pc) grace a l'a Récupérer l'IP du client (SOCKETS) dans une app client/serveur [ par supergrey ] Bonjour, je voudrais savoir comment récupérer l'IP du client a partir du programme serveur après le sock=accept(...);Merci d'avance !


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,714 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales