Maison >développement back-end >tutoriel php >Tutoriel de gestion de session de podcast Chuanzhi

Tutoriel de gestion de session de podcast Chuanzhi

炎欲天舞
炎欲天舞original
2017-08-24 11:02:531542parcourir

Introduction au cours :

1 Chargement des fichiers de ressources de l'application Web

2 Introduction aux cookies

3 Détails des cookies

4 Cas de cookie - dernière visite de l'utilisateur Temps 1

5 cookies cas-dernière visite de l'utilisateur temps 2

6 cookies produits consultés par cas

7 sessions techniques d'explication détaillée

adresse de lecture :http://www.php.cn/course/564.html

Caractéristiques du professeur : Rigueur de réflexion, sérieux, savoir saisir les points clés, pour que les étudiants sachent quand se concentrer mémoire, apprenez facilement et apprenez rapidement.

Analyse des difficultés : points clés des principes des cookies ;

Les similitudes et les différences entre cookie et session

Quand utiliser cookie et session.

Adresse de téléchargement du didacticiel : http://www.php.cn/xiazai/code/2083

Le protocole HTTP étant un protocole sans état, le serveur WEB Chaque la demande de l'utilisateur est traitée comme une nouvelle demande. Cependant, de nombreuses

de nombreuses applications WEB ont besoin de sauvegarder certaines informations de la dernière requête. Afin de résoudre ce problème, se pose le problème de la gestion des sessions et des états

. Dans la vidéo, les points de connaissances pertinents incluent : les sessions et états de session dans les applications WEB, les cookies, l'utilisation des cookies dans les programmes Servlet

, les Sessions, les cas typiques de Sessions et la gestion de la persistance des Sessions.

La soi-disant session fait référence à une série de requêtes et de réponses qui se produisent en continu entre un navigateur client et le serveur WEB. L'état de session de l'application WEB

fait référence aux informations d'état générées par le serveur WEB et le navigateur lors de la session. A l'aide de l'état de session, le serveur WEB peut gérer l'appartenance

. à une série de requêtes dans la même session associée au processus de réponse. Par exemple, lorsqu'un utilisateur se connecte depuis la page de connexion du site Web puis

entre dans la page d'achat pour effectuer un achat, le programme serveur chargé de traiter la demande d'achat doit connaître l'utilisateur

obtenu par le programme qui a traité les informations de la requête précédente. Le protocole HTTP étant un protocole sans état, le serveur WEB lui-même ne peut pas identifier quelles requêtes sont émises par le même navigateur

Chaque requête du navigateur est complètement isolée. Par conséquent, le programme côté serveur WEB doit être capable de distinguer parmi un grand nombre de messages de requête lesquels

les messages de requête appartiennent à la même session, c'est-à-dire qu'il peut identifier les demandes d'accès du même navigateur, ce qui nécessite le navigateur à émettre Chaque

message de requête est identifié. Les messages de requête appartenant à une même session sont tous accompagnés du même numéro d'identification, tandis que les messages de requête

appartenant à des sessions différentes sont toujours accompagnés de différents numéros. numéros d'identification , ce numéro d'identification est appelé ID de session (SessionID). L'ID de session est généré par le serveur

et transmis au navigateur Si le client souhaite le recevoir et le renvoyer au serveur pour vérification, un mécanisme correspondant est requis. Il s'agit d'un

Cookie. technologie, qui non seulement les informations de session correspondantes sont temporairement reçues et enregistrées, mais peuvent également être enregistrées sur le disque dur du client pendant une longue période.

SessionID peut non seulement être transmis dans le message de demande via la technologie Cookie, mais peut également être transmis en tant que paramètre supplémentaire de l'URL de demande

. SessionID est un code unique attribué par le serveur WEB à chaque navigateur client. Il est généralement généré lorsque le serveur WEB reçoit la première visite d'un navigateur

et est envoyé au navigateur avec le message de réponse. Le processus de session est démarré par le programme

sur le serveur WEB. Une fois qu'une session est ouverte, le programme côté serveur créera une structure de stockage indépendante pour la session afin de sauvegarder les informations d'état des demandes d'accès. dans la même session peut et ne peut accéder qu'aux informations d'état dans la structure de stockage appartenant à cette session.

Le cookie est une technologie qui conserve les informations sur le statut HTTP du client. C'est comme une carte de réduction émise par un centre commercial. Le cookie est une donnée qui est envoyée au navigateur par le serveur WEB dans l'en-tête de réponse HTTP lorsque le navigateur

accède à une ressource du serveur WEB l'envoie à chaque client. le navigateur final peut être différent. Une fois que le navigateur WEB enregistre un cookie,

puis à chaque fois qu'il accèdera au serveur WEB à l'avenir, il devra renvoyer le cookie au serveur WEB dans l'en-tête de la requête HTTP. Le serveur WEB

envoie les informations Cookie au navigateur en ajoutant le champ d'en-tête de réponse Set-Cookie au message de réponse HTTP, et le navigateur ajoute l'en-tête de requête Cookie au message de requête HTTP par

Field renvoie le cookie au serveur WEB. Un cookie ne peut identifier qu'un seul type d'informations

, qui contient au moins un nom (NOM) et une valeur de paramètre (VALEUR) qui identifie l'information. Un site WEB peut envoyer plusieurs cookies à un navigateur WEB, et un navigateur WEB peut également stocker des cookies fournis par plusieurs sites WEB.

Les champs d'en-tête Set-Cookie et Set-Cookie2 peuvent être utilisés dans le programme pour spécifier le contenu du cookie envoyé par le serveur WEB au client

Les deux utilisent uniquement des spécifications différentes, mais. leur La syntaxe et les fonctions sont similaires. Vous pouvez choisir la réponse appropriée en fonction de la prise en charge du navigateur

Champ d'en-tête. Le contenu du cookie défini dans le champ d'en-tête Set-Cookie2 est une chaîne avec un certain format. Il doit commencer par le nom du cookie

et la valeur définie. Le format est "name=value", et peut. être suivi de 0 ou de plusieurs autres attributs facultatifs séparés par des points-virgules (;) et des espaces. Le format de l'attribut

est généralement "nom de l'attribut = valeur".

Enfin, expliquons le champ d’en-tête de requête du cookie renvoyé par le navigateur. Le navigateur utilise le champ d'entête de requête Cookie pour renvoyer les informations Cookie

au serveur WEB. Plusieurs informations sur les cookies sont renvoyées au serveur WEB via un champ d'en-tête de demande de cookie. Le fait que le navigateur envoie certaines

informations sur les cookies est déterminé selon les règles suivantes :

1. Si le nom d'hôte demandé correspond à l'attribut de domaine d'un cookie stocké

2 . Si le numéro de port demandé est dans la liste d'attributs de port du cookie

3. Si le chemin de ressource demandé est dans le répertoire et le sous-répertoire spécifiés par l'attribut Path du cookie

4. Si la période de validité du cookie a expiré. Chaque cookie dans le champ d'en-tête de demande de cookie est séparé par une virgule (,) ou un point-virgule (;)

. En plus du paramètre « nom=valeur », le champ d'en-tête de requête Cookie peut également avoir plusieurs attributs tels que Version, Chemin, Domaine, Port

, etc. Cependant, si vous souhaitez définir des attributs tels que la version, le chemin, le domaine, le port, etc., vous devez ajouter un caractère

"$" comme préfixe avant le nom de l'attribut, et l'attribut Version ne peut que apparaissent une fois et doivent être situés dans le champ d'en-tête de demande de cookie Au début de la valeur de paramètre,

Si vous devez définir le chemin, le domaine, le port et d'autres attributs d'une certaine information de cookie, ils doivent l'être. situé après le paramètre « nom =

valeur » des informations du cookie. Il est à noter que l'attribut Path pointe vers le cookie du sous-répertoire précédant le

Cookie dont l'attribut Path pointe vers le répertoire parent. Par exemple : Cookie : $Version=1 ; Course=Java ; $Path=/it315/lesson ;

$Path=/it315; Ce cookie respecte les contraintes ci-dessus. Un exemple spécifique est présenté dans le didacticiel vidéo :

代码一:
      Cookie ckName = new Cookie("name",name); 
      Cookie ckNickname = new Cookie("nickname",nickname); 
      ckNickname.setMaxAge(365*24*3600); 
      Cookie ckEmail = new Cookie("email","test1@it315.org"); 
      Cookie ckPhone = new Cookie("phone","1111111"); 
      response.addCookie(ckName); 
      response.addCookie(ckNickname); 
      response.addCookie(ckEmail); 
      response.addCookie(ckPhone);
代码二:
      String lastNickname = null; 
      Cookie [] cks = request.getCookies(); 
      for(int i=0; cks!=null && i<cks.length; i++) {
          if("nickname".equals(cks[i].getName())) {
              lastNickname = cks[i].getValue();
              break;  
          } 
      }  
      if(lastNickname != null) {
      out.println("欢迎您," + lastNickname );
      }

Le premier extrait de code ci-dessus génère quatre informations de cookie nommées nom, surnom, e-mail et téléphone. Les valeurs des deux cookies nom et

pseudo sont définies via les paramètres de la demande, et le cookie pseudo reste valable 1

an. Les valeurs des deux cookies email et téléphone. Il est spécifié en dur dans le programme. Le deuxième extrait de code consiste à générer des informations sur le cookie

, puis à rechercher les informations sur le cookie nommées surnom dans le message de demande, et à imprimer également le message d'accueil correspondant en fonction du résultat renvoyé. imprime La valeur du champ d'en-tête Cookie dans le message de requête sortant.

Comprendre le concept de session et la technologie Cookie, puis donner une introduction détaillée et un exemple de démonstration de Session. Cette vidéo explique principalement

Qu'est-ce que la session, le mécanisme de suivi de session, la gestion du délai d'expiration de session, les méthodes de l'interface HttpSession,

Les méthodes de session dans l'interface HttpServletRequest, les étendues de domaine d'application et de session Comparaison des attributs, en utilisant

Cookie pour mettre en œuvre le suivi de session et utilisation de la réécriture d'URL pour mettre en œuvre le suivi de session. Ces technologies seront fréquemment utilisées à l’avenir.

L'utilisation de cookies et de paramètres d'URL supplémentaires peut transmettre les informations d'état de la requête précédente à la requête suivante. Cependant, si davantage d'informations d'état de

sont transmises, l'efficacité de la transmission du réseau sera considérablement réduite. . et augmenter la difficulté du traitement des programmes côté serveur. Afin de résoudre ce problème, la technologie

Session est née. La technologie de session est une technologie qui enregistre l'état de la session côté serveur. Pendant la session, le client

doit recevoir, mémoriser et renvoyer le numéro d'identification de session de la session et utilise généralement un cookie pour transmettre le numéro d'identification de session. Comme vous pouvez le constater, Cookie et Session fonctionnent souvent ensemble, ce qui peut résoudre la nature apatride du protocole HTTP

. Avec le concept de session, un programme est nécessaire pour l'implémenter, puis permettre au serveur de suivre avec succès une session spécifique.

Dans la spécification de l'API Servlet, une interface HttpSession est définie. L'interface HttpSession définit diverses méthodes de gestion et d'exploitation de l'état de la session

. L'objet HttpSession généré par le serveur WEB est une structure de stockage qui conserve les informations sur l'état de la session. Un client correspond à un objet HttpSession respectif sur le

serveur WEB. Le serveur WEB ne crée pas l'objet

HttpSession lorsque le client commence à y accéder. L'application WEB ne créera le

Créez un objet HttpSession correspondant au client. Le serveur WEB attribue un numéro d'identification de session

unique à chaque objet HttpSession, puis transmet ce numéro d'identification de session au client dans le message de réponse. Le client doit se souvenir du numéro d'identification de session et transmettre ce numéro d'identification de session au serveur WEB lors de chaque demande d'accès ultérieure

Le programme du serveur WEB s'appuiera sur le numéro d'identification de session

renvoyé. savoir quel client a émis cette requête, et ainsi sélectionner l'objet HttpSession correspondant. Parce que la ressource côté serveur

est limitée et ne peut pas sauvegarder les objets HttpSession de manière illimitée, l'application WEB crée un

correspondant à un certain client.

HttpSession对象后,只要没有超出一个限定的空闲时间段,HttpSession对象就驻留在WEB服务器内

存之中,该客户端此后访问任意的Servlet程序时,它们都使用与客户端对应的那个已存在的

HttpSession对象。HttpSession接口中专门定义了一个setAttribute方法来将对象存储到

HttpSession对象中,还定义了一个getAttribute方法来检索存储在HttpSession对象中的对象,存

储进HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。

    前面提到的服务器资源有限,WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无

法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保留与之

对应的HttpSession对象。但是随着时间的推移而不断增加新的访问客户端,WEB服务器内存中将会

因此积累起大量的不再被使用的HttpSession对象,并将最终导致服务器内存耗尽。因此WEB服务器

采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发

出后续请求,WEB服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的

HttpSession对象变成垃圾。如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一

个新的会话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。虽然会有少数出现事

实上的同一会话,却产生两次HttpSession对象,但是相对于大量正常的访问请求,这种情况基本上

可以忽略了。在Servlet API中,会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容

器定义。

    例如:<session-config>
              <session-timeout>30</session-timeout>
          </session-config>

    下面拿出视频中的一个小例子来说明一下使用Session实现购物车:

      String courseSelect = request.getParameter("course");
      if(courseSelect != null){
          Vector vCourses = (Vector)session.getAttribute("courses");
          if(vCourses == null){
              vCourses = new Vector();
              vCourses.add(courseSelect);
              session.setAttribute("courses",vCourses);
          }
          else{
              if(vCourses.contains(courseSelect)){
                  out.println(sessionName + ",你以前选择过了" + 
                             courseSelect + "<hr>");
              }
              else{
                  vCourses.add(courseSelect);
              }
          }
      }

上面的代码首先判断访问请求是否来自一个已登录用户,如果不是,则将请求重定向到logon.html页

面。接着判断当前访问请求是否是用户选择课程时发出的,如果是,则将用户选择的课程加入购物车

。最后显示出所有供选择的课程列表和已放入购物车中的课程列表。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn