Jusqu'à présent, je comprends les concepts de Httpsession en Java.
HttpSession ses = req.getSession(true);
créera un objet de session, selon la demande.
setAttribute("String", object);
will, liera la "chaîne" et la valeur à l'objet Session.
getAttribute("String");
renverra un objet associé à la chaîne spécifiée.
Ce que je ne peux pas comprendre, c'est: je crée un objet de session comme HttpSession ses = req.getSession(true);
et je lui attribue un nom en appelant setAttribute("String", object);
. Ici, ce code réside à l'intérieur du serveur. Pour chaque personne, lorsqu'il essaie de se connecter, le même code sur le serveur sera exécuté. setAttribute("String", object);
dans cette méthode, la valeur de chaîne est constante. Ainsi, chaque objet de session créé sera lié par la même chaîne que celle que j'ai fournie. Lorsque j'essaie de récupérer la chaîne pour valider sa session ou lorsque l'action de déconnexion a pris la getAttribute("String");
ll retourne la même valeur de chaîne constante (ai-je raison !! ?? En fait, je ne sais pas, je suis juste en pensant à sa logique d'exécution). Ensuite, comment puis-je invalider.
J'ai vu ce type d'illustration dans tous les tutoriels sur le WEB. Est-ce la manière réelle de définir cet attribut? Ou, les vrais développeurs d'applications donneront une variable dans le champ "String" pour la définir dynamiquement
(ie. session.setAttribut(userName, userName); //Setting the String Dynamically.. I dono is it right or not.)
Et ma dernière question est
WebContext ctx = WebContextFactory.get();
request = ctx.getHttpServletRequest();
Que font les deux lignes ci-dessus? Qu'est-ce qui sera stocké dans ctx & request? HttpSession ses = req.getSession(true);
créera de nouveaux moyens de session. Quelle valeur stockée dans ses.
Quelques précisions [aléatoires]:
request.getSession(true)
, l'objet HttpRequest
sera inspecté afin de trouver un ID de session encodé soit dans un cookie OU/ET dans le paramètre de chemin URL (ce qui suit un point-virgule ). Si l'ID de session est introuvable, une nouvelle session sera créée par le conteneur de servlet (c'est-à-dire le serveur).response.encodeURL()
. L'appel de request.getSession(false)
ou simplement request.getSession()
renverra null si l'ID de session n'est pas trouvé ou si l'ID de session fait référence à une session non valide.web.xml
.invalidate()
.JSESSIONID
, ils font référence au nom standard du cookie HTTP utilisé pour effectuer le suivi de session en Java.Je vous suggère de lire un tutoriel sur Java. Chaque utilisateur obtient un objet HttpSession différent, basé sur un paramètre de demande/réponse JSESSIONID que le Java le serveur Web envoie au navigateur. Ainsi, chaque utilisateur peut avoir un attribut du même nom et la valeur stockée pour cet attribut sera différente pour tous les utilisateurs.
En outre, WebContextFactory et WebContext sont des classes DWR qui fournissent un moyen simple d'obtenir les paramètres de servlet.
Si je comprends bien, vos préoccupations concernent la séparation des différents utilisateurs lors du stockage des éléments dans la session HttpSession.
Le conteneur de servlet (par exemple Tomcat) s'en charge en utilisant son JSESSIONID.
L'histoire se passe ainsi:
J'espère que cela répond (au moins partiellement) à votre question.
À votre santé
Votre servlet de base va ressembler
public class MyServlet{
public doGet(HttpServletRequest req, HttpServletResponse res){
//Parameter true:
// create session if one does not exist. session should never be null
//Parameter false:
// return null if there is no session, used on pages where you want to
// force a user to already have a session or be logged in
//only need to use one of the two getSession() options here.
//Just showing both for this test
HttpSession sess = req.getSession(true);
HttpSession sess2 = req.getSession(false);
//set an Attribute in the request. This can be used to pass new values
//to a forward or to a JSP
req.setAttribute("myVar", "Hello World");
}
}
Il n'est pas nécessaire de définir des noms d'attributs pour votre session qui sont déjà terminés. Comme d'autres l'ont suggéré dans d'autres réponses, utilisez des cookies ou une réécriture d'URL pour stocker l'ID de session pour vous.
Lorsque vous traitez avec le DWR WebContext, il fait simplement la même chose que ci-dessus, juste normalement l'objet Request n'est pas passé dans la méthode, vous utilisez donc le WebContext pour obtenir cette demande pour vous
public class DWRClass {
public doSomething(){
WebContext ctx = WebContextFactory.get();
HttpServletRequest req = ctx.getHttpServletRequest();
HttpSession sess = req.getSession(); //no parameter is the same as passing true
//Lets set another attribute for a forward or JSP to use
ArrayList<Boolean> flags = new ArrayList<Boolean>();
req.setAttribute("listOfNames", flags);
}
}