Bonjour a tous,
J'ai créé un serveur Java, grâce à la classe HTTPServer... Je voudrais savoir si c'est possible d'ouvrir une session pour chaque client qui se connecte ..
Si oui comment faire
Merci d'avance
Version imprimable
Bonjour a tous,
J'ai créé un serveur Java, grâce à la classe HTTPServer... Je voudrais savoir si c'est possible d'ouvrir une session pour chaque client qui se connecte ..
Si oui comment faire
Merci d'avance
Salut,
Une session, c'est juste un conteneur d'informations. Et pour pouvoir l'associer à un "utilisateur", il te suffit de définir un identifiant, que cet "utilisateur" retournera dans ses requêtes à chaque appel, pour que le serveur soit capable de retrouver le bon conteneur associé (il en maintient une liste en mémoire). Ce que fait le JSESSIONID, un cookie placé par le serveur dans la première réponse à une requête sans ce cookie, et que le client lui renvoie, et qu'il renvoie au client ensuite... Il faut également prévoir un mécanisme qui permet de supprimer une session (expiration) de la mémoire du serveur.
Les JSESSIONID c'est pas quand on utilise des servlets?
J'arrive bien à mettre le cookie dans l'entête de ma réponse(il apparait quand j'affiche mon header) mais après dans les prochaines requête il ne me le renvoie pas
Pour ajouter le cookie à l'entête j'ai fait
Code:responseEntete.add("Set-Cookie","ID=Utilisateur1")
Il est renvoyé par le client dans le header "Cookie", et c'est au serveur de le renvoyer systèmatiquement dans les headers sous le header Set-Cookie.
C'est bien ce que j'ai fait non?
Je ne sais pas : sans voir tout le code qu'il y a derrière responseEntete.add("Set-Cookie","ID=Utilisateur1") et quand tu l'appelles, ni comment tu fais pour vérifier que ton client obtient bien le cookie, ni comment tu fais pour savoir que le client ne renvoie pas la session (dans le header "Cookie").
reponseEntête est déclaré de la façon suivante :
requeteEntete de la façon suivante :Code:Headers reponseEntete = exchange.getResponseHeaders()
J'ajoute un cookie dans l'entête de ma réponse :Code:Headers reponseEntete = exchange.getRequestHeaders()
Pour afficher mon entête de réponse je fais :Code:reponseEntete.add("Set-Cookie","ID=Utilisateur1")
Pareil pour la requête.Code:requeteEntete.values()
Sa m'affiche tous les éléments des entêtes sous forme de ListArray(date,Accept-Encoding,Cache-control...)
Quand j'affiche mon ID=Utilisateur1 est bien dans reponseEntete mais pas dans requeteEntete.
Et après chaque requête envoyé j'ai bien ID=Utilisateur1 dans ma réponse quand je parcours les pages du serveur
J'ai aussi remarqué que Google Chrome n'affiche pas le cookie quand je fais "Inspecter l'élement" et ça que ce soit l'entête de la réponse ou l'entête de la requête
Je ne connais pas le code de la classe HttpServer que tu utilises, mais quand je vois
je me demande sur quelle responseEntete est fait le add() : sur celle déclarée dans le premier code, ou le second ?
Ensuite, ne connaissant pas le code de cette méthode, elles pourraient tout aussi bien être comme ça :
Code:
1
2
3 public void add(String jemenfous, String jemenfousaussi) { // je ne fais rien et je ne m'en porte pas plus mal }
Ok, a priori, la réponse à mes 2 premières remarques est que tu ajoutes bien le header dans la réponse, et que c'est bien stocké quelque part. On ne sait pas si c'est vraiment envoyé dans la réponse.
Où ? Quand tu regardes les headers dans l'outil de développement de ton navigateur ?
Ah... donc c'est possiblement non envoyé dans la réponse. Tu devais te faire un petit sniffer http et l'utiliser en proxy, justement pour inspecter ce qu'il s'échange entre client et serveur...
Voici la doc concernant la classe HttpServer : http://docs.oracle.com/javase/8/docs...ttpServer.html
Je me suis trompé il y a un Header qui s'appelle reponseEntete et l'autre requeteEntete.
La fonction add prend deux string (le premier le nom le deuxième la valeur)
C'est a dire si tu fais reponseEntete.add("Content-Type", "image/png"), il va ajouter la ligne "Content-Type : image/png" à l'entête de réponse. C'est une méthode de la classe HTTPServer
Les entêtes de requête/réponse s'affiche dans la console de Eclipse grâce a System.out.println(reponseEntete.values()) par exemple
Bah, déjà c'est une abstraction cette classe. Ensuite, tu ne devrais pas utiliser des classes de com.sun. Elles ne font pas parties du JDK standard.
Et puis, elles sont où les méthodes getResponseHeaders() et getRequestHeaders(), dans cette classe ?
ça ne garantit absolument pas que c'est écrit dans le flux de la réponse.
getResponseHeader et geRequestHeader font parti de la classe HttpExchange (voir doc : https://docs.oracle.com/javase/7/doc...pExchange.html)
Tu suis bien le cycle de vie indiquée dans la documentation de cette classe :
En particulier le point 5, avant le point 6...Citation:
Envoyé par javadoc
mERci je n'avais pas tout mis dans le bon ordre