Introduction de session de session
Une session fait référence au processus d'interaction entre un utilisateur utilisant le même processus de navigateur et une application Web sur une période de temps.
Les séances sont généralement utilisées pour suivre l'état de l'utilisateur et mettre en cache les informations de l'utilisateur dans ce processus de navigateur.
Lorsque l'utilisateur ferme le navigateur, la session précédente ne peut pas être obtenue à nouveau (le cas où le maxage du cookie est -1). Ouvrez à nouveau un nouveau navigateur et une nouvelle session commencera.
Classe Javax.servlet.http.httpSession. Chaque HTTPSESSIE représente une session de l'utilisateur.
Le temps d'expiration de chaque session est de 30 minutes par défaut.
Lorsque le navigateur accède d'abord au serveur, quelle que soit la page qu'il visite d'abord, le serveur affectera un identifiant de session unique à l'utilisateur, c'est-à-dire JSessionID puis le renverra à l'utilisateur sous la forme d'un cookie.
Le chiffre suivant est un en-tête de réponse (le chiffre suivant est basé sur le servlet 3.0, et il n'y a pas d'attribut httponly dans Servlet 2.5)
Le serveur crée une session pour chaque utilisateur, à savoir l'objet HTTPSESSE et l'enregistre du côté du serveur.
Ainsi, lorsque l'utilisateur accède à nouveau au serveur, comment le serveur sait-il ou l'utilisateur actuel?
Lorsque le navigateur accède à nouveau au serveur, il transportera un cookie contenant JSessionID pour accéder au serveur. Le serveur renvoie l'objet HTTPSession de cet utilisateur en fonction de cet ID et maintient la session.
(Alors, est-il possible d'implémenter la même session sur différents navigateurs?
Voici une URL typique, qui a un certain effet d'usurpation et peut implémenter la même session sur différents navigateurs:
http: // localhost: 8080 / day07_2 / cncookieservlet; jSessionId = f8692d61cd46d094dbb7a8fc7387649c)
La relation entre le navigateur et le serveur est la suivante:
HttpSession:
Dans un servlet, l'objet de session est obtenu via la méthode httpservletRequest.getSession.
Les méthodes suivantes de l'interface HTTPSESSE sont utilisées pour partager des données à l'échelle de la session:
getAttribute ("name") setAttribute ("name", objet); getTrutEnAnames () removeAtTribute ("name")Invalider(); - Cette méthode supprime fortement la session mise en cache du serveur.
Exemple:
SetAttribute dans la httpcession d'un servlet.
Accédez à un autre servlet via HyperConnect, ou autrement et affichez les informations via GetAttribute.
Appelez GetAttribute dans n'importe quel servlet pour afficher des informations.
Fermez ce navigateur et revisitez le servlet qui obtient des informations, et vous constaterez qu'il n'y a plus aucune information.
comme suit:
String name = request.getParameter ("name"); request.setAttribute ("name", "request ---" + name); request.getSession (). setAttribute ("name", "session ---" + name); getServletContext (). setAttribute ("name", "application ---" + name); L'identifiant unique de la session:
Chaque session a un identifiant unique, à savoir un ID.
Lorsque le navigateur obtient une nouvelle session, l'utilisateur peut imprimer la valeur d'ID via session.geid ().
Sans fermer le navigateur, sauter sur plusieurs pages, en utilisant la même session.
comme:
request.getSession (). getID ()
Qu'est-ce que la sortie sûre:
Lorsqu'un utilisateur sort, il devrait effacer ses informations de la session, c'est-à-dire en toute sécurité.
La sortie sécurisée vise à effacer les informations que vous laissez sur le serveur pour empêcher qu'elle soit piratée.
Session.invalidate ();
1. Request.getSession (). Invalidate ();
Cela permet de supprimer les objets correspondants du pool de session.
2. Session.RemoveAtTribute (…)
comme:
request.getSession (). RemoveAtTribute ("realCode");
Utilisé pour supprimer les attributs dans les objets de session
Suivez la session en réécrivant l'URL:
Comme mentionné précédemment, le conteneur servlet enregistre d'abord un sessionID sur le client. Plus tard, lorsque le navigateur émet une demande HTTP, elle contiendra ce sessionID. Le conteneur servlet lit le SessionID dans la demande HTTP et élimine l'objet HTTPSESSION du conteneur en fonction de ce sessionID pour faciliter le suivi de la session à laquelle appartient la demande HTTP. Ce processus s'appelle le suivi de la session.
Si le navigateur prend en charge les cookies, le conteneur servlet enregistre le SessionId en tant que cookie sur le client du navigateur. Mais si l'utilisateur désactive les cookies pour des raisons de sécurité, comment le conteneur servlet peut-il suivre la session?
Désactivons d'abord les cookies dans IE (Remarque: cela ne fonctionne pas pour certains systèmes fantômes).
IE> Outils> Options Internet> Confidentialité> Avancé, puis désactivez les cookies:
Nous pouvons ajouter un tel hyperlien à la page d'accueil: (Je mets le code lié à SaveServlet.java getservlet.java Logoutservlet.java Logoutservlet.java dans le code suivant)
<h2> Démontrez la technologie de réécriture de l'URL ---- Cracking le problème que notre session est invalide après que l'utilisateur a désactivé les cookies </h2> <form action = "<% = réponse.Encodeurl (" SaveServlet ")%>" Method = "Post"> name: <entrée Type = "Text" Name = "Name" /> <br/> <entrée) href = "<% = réponse.encodeurl (" getServlet ")%>"> Réécrivez les données URL-read dans plusieurs conteneurs </a> <br/> <a href = "<% = réponse.encodeurl (" LogoServlet ")%>"> Réécriture de sortie de l'URL-SEAF </a>Cette phrase <formulaire action = "<% = réponse.encodeurl (" / aa ")%>"> peut réaliser cette fonction
Après avoir désactivé des cookies ici, le navigateur peut toujours recevoir des cookies envoyés par le serveur, mais le navigateur ne peut les accepter que et ne peut pas les envoyer au serveur. Si les cookies ne peuvent pas être envoyés, il ne peut pas aller au pool de session pour obtenir l'objet correspondant.
Après avoir saisi la valeur souhaitée dans le formulaire, accédez à l'hyperlien dans le Getservlet ci-dessous pour voir si la valeur d'entrée peut toujours être affichée. La réponse est oui. Le chemin d'accès ici est similaire
http: // localhost: 8080 / day07_2 / cncookieservlet; jSessionId = f8692d61cd46d094dbb7a8fc7387649c, le jSessionId = f8692d61cd46d094dbb7a8fc7387649c derrière c'est id. De cette façon, vous pouvez y accéder en entrant cette URL dans un autre navigateur.
Ici, je veux ajouter: (La situation suivante est que lorsque j'écris l'objet httpSession dans le pool de session, la valeur JSessionID et la valeur de la session correspondante dans le cookie. Ce cookie écrasera celle créée par le système, ce qui équivaut à être créé par moi-même.
Dans les deux cas si les cookies sont désactivés, les ID des objets nouvellement créés dans le pool de session sont différents. Autrement dit, si vous entrez une valeur d'un nom dans le formulaire lorsque les cookies sont désactivés, le résultat de la requête est le suivant:
Et JSessionId est 2BB51EBDEAAF14D19656C71E1B6F9FF6
Ensuite, passez immédiatement en mode cookie sans le désactiver, entrez un autre nom tel que Tom, et le résultat de la requête sera naturellement deux Tom, et JSessionId est
203F9E4DB5D874476B81DAF350661B6A, qui est différent de la désactivation, ce qui fait apparaître les résultats suivants.
Ensuite, à l'heure actuelle, nous fermons le navigateur, entrons à nouveau le navigateur et visons les résultats d'accès sans désactiver le mode cookie, comme suit:
Je publierai le code principal ci-dessous:
Saveservlet.java
Package CN.HNCU.Servlets.Session; Importer java.io.ioException; import java.io.printwriter; Importer javax.servlet.servletException; Importer javax.servlet.http.cookie; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; La classe publique SaveServlet étend HttpServlet {public void doGet (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {doPost (request, réponse); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {réponse.setContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); request.SetcharAtterencoding ("UTF-8"); String name = request.getParameter ("name"); request.setAttribute ("name", "request ---" + name); request.getSession (). setAttribute ("name", "session ---" + name); getServletContext (). setAttribute ("name", "application ---" + name); // Un exemple de combinaison de la technologie des cookies et de la technologie de session pour l'application - ※ Fonction: Après la fermeture du navigateur, si l'utilisateur peut se connecter à ce site dans les 10 minutes, il peut également accéder aux informations de la session // écrire un cookie avec une clé "JSessionID" et une valeur en tant que sessionID au client. Cookie c = new cookie ("jSessionId", request.getSession (). GetID ()); C.SetMaxage (60 * 10); // Le phénomène ci-dessus est causé par cette phrase. Sans cette phrase, il n'y aura pas de phénomène tel que mentionné ci-dessus c.setPath (request.getContextPath ()); réponse.addcookie (c); Out.println ("Save Successfust ..."); out.flush (); out.close (); }}GetServlet.java
Package CN.HNCU.Servlets.Session; Importer java.io.ioException; import java.io.printwriter; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; La classe publique Getservlet étend HttpServlet {public void doGet (request httpservletRequest, httpservletResponse réponse) lève ServletException, ioException {réponse.setContentType ("text / html; charset = utf-8"); Printwriter out = réponse.getWriter (); out.println ("<! doctype html public /" - // w3c // dtd html 4.01 transitional // en / ">"); out.println ("<html>"); out.println ("<adread> <itle> un servlet </Title> </A-head>"); out.println ("<porce>"); String reqName = (String) request.getAttribute ("name"); String Sename = (String) request.getSession (). GetAttribute ("name"); String appname = (string) getServletContext (). GetAttribute ("name"); out.println (reqname + "<br/>"); out.println (sename + "<br/>"); out.println (appname + "<br/>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}LogoTServlet.java
Package CN.HNCU.Servlets.Session; Importer java.io.ioException; import java.io.printwriter; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; La classe publique LogoServlet étend HttpServlet {public void doGet (HttpServletRequest Request, HttpServletResponse Response) lève ServletException, ioException {réponse.setContentType ("Text / Html; Charset = UTF-8"); Printwriter out = réponse.getWriter (); // Exit Safe --- Tant que l'objet de session est invalide demande.getSession (). Invalidate (); Out.println ("Sort Exit ..."); }}Ce qui précède est la gestion de la session de session Javaweb qui vous est présentée par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, laissez-moi un message. L'éditeur vous répondra à temps!