Maison  >  Article  >  Java  >  Explication des sessions et des états de session des cookies et des sessions

Explication des sessions et des états de session des cookies et des sessions

巴扎黑
巴扎黑original
2017-07-17 14:30:291966parcourir

1. Aperçu de la session

1)Phénomènes : Le protocole HTTP est un protocole sans état et ne peut pas être reconnu par le serveur Web lui-même. Quelles requêtes sont émises par le même navigateur, chaque requête du navigateur est complètement isolée.

2) Solution : Avec l'état de session, le serveur web peut associer une série de processus de requêtes et de réponses appartenant à la même session.

3) Implémentation : nécessite que le navigateur identifie chaque message de requête qu'il envoie. Cette identification est appelée identifiant de session (SessionID).

2. Les cookies

1 : Il y en a deux. types Type de cookie :

1> Cookie de session (cookie de session)

Si aucun délai d'expiration n'est défini, cela signifie que le cycle de vie de ce cookie est pendant la session du navigateur. la fenêtre du navigateur est fermée, le cookie disparaîtra.

La durée de vie est la session du navigateur.

Généralement il n'est pas enregistré sur le disque dur mais dans la mémoire.

2> Cookies persistants (cookies persistants)

Si le délai d'expiration est défini, le navigateur enregistrera le cookie sur le disque dur. Après avoir fermé et rouvert le navigateur, ces cookies seront toujours. être valable jusqu'à l'expiration de la date d'expiration.

Il est enregistré sur le disque dur de l’utilisateur et peut être obtenu par le même navigateur.

2 : Connaissances liées à la session

2.1 : Qu'est-ce que la session ?

La session est un mécanisme de sauvegarde des informations contextuelles. La valeur de la variable est enregistrée côté serveur. Les différents clients se distinguent par l'ID de session.

2.2 : Comment fonctionne la session

client————>1.request————————->serveur

2. session_start( ) ;

|<————-3.reponse(SESSION_ID)<——–|

|————->4.request(SESSION_ID)—— — >|

5. session_start();

|<————-6.reponse(SESSION_ID)<————|

|— ————->7. request(SESSION_ID + déconnexion)–>|

                8. session_destroy();

|<————-9. cookie File)<——-|

Le client ouvre la page Web et fait une demande au serveur puisqu'il n'y a pas de fichier cookie correspondant sur le. client, il n'est pas envoyé dans la requête. SESSION_ID

Après avoir reçu la requête du client, le serveur commence à traiter la session en exécutant la fonction session_start(). Tout d'abord, confirmez s'il y a un SESSION_ID dans la requête. non, émettez un nouveau SESSION_ID ; si c'est le cas, appelez le fichier contenant SESSION_ID, écrivez les informations dans $_SESSION et stockez-les dans le fichier commençant par sess_.

Renvoyer le paramètre $_SESSION des informations écrites au client Une fois que le client a reçu les informations envoyées par le serveur, il enregistre les informations dans le cookie.

Le client écrit le SESSION_ID dans le cookie dans l'en-tête et envoie à nouveau une requête au serveur. Répéter les opérations 1-3

Le client émet une demande de déconnexion

Une fois que le serveur a accepté la demande, il commence à supprimer le fichier de session en exécutant la fonction session_destroy()

Le le serveur envoie une demande de suppression au client Commande pour le fichier cookie enregistré sur le client : setcookie(session_name(), ”, time()-60, '/');

2.3 : Remarque

Normalement, il ne peut pas être utilisé sur toutes les fenêtres, mais l'identifiant de session est enregistré dans un cookie persistant, puis lu à partir d'une nouvelle fenêtre pour obtenir l'identifiant de session afin de permettre une utilisation multi-fenêtres

Dans. sites Web avec de grandes pages vues, la session n'est pas sûre et un identifiant de session en double peut apparaître

L'ID de session ne peut pas être obtenu à partir du fichier cookie sur le disque dur. Si vous souhaitez connaître votre ID de session sur le client, vous devez le faire. ne peut le lire que via Javascrīpt. >

2.4 Utilisation et paramètres de PHP

Session_start() : démarrer une session ou revenir à une session existante. Le navigateur ne peut avoir aucune sortie avant de l'utiliser. Session_start(), sinon ce sera le cas. L'erreur suivante s'est produite. Vous pouvez activer session.auto_start=1 dans php.ini afin de ne pas avoir besoin d'appeler session_start() à chaque fois que vous utilisez la session.

Si session.auto_start=1, session_save_path («./t/») deviendra invalide. Parce que cette dernière affirmation doit être placée en premier.

2.5 Augmenter les capacités de stockage et de traitement des sessions de PHP

;session.save_path = « N;MODE;/path » Ce paramètre nous permet de stocker des sessions Le répertoire effectue plusieurs -hachage de niveau, où "N" représente le niveau de répertoire à définir,

"MODE" représente l'attribut d'autorisation du répertoire, la valeur par défaut est 600

2.6 :Plusieurs serveurs partageant une SESSION php

1. La méthode de partage NFS ou Samba permet de partager les disques stockant les fichiers de session sur chaque serveur. Cette méthode est simple et réalisable.

2. Stockage centralisé dans la base de données. Il s'agit d'une méthode d'implémentation relativement courante. La fonction session est redéfinie via la fonction session_set_save_handler() fournie par PHP.

3 : Connaissance des cookies

Qu'est-ce que le Cookie ? Comment ça marche ? Un cookie est un petit morceau d'information textuelle qui est transmis entre un serveur Web et un navigateur avec les requêtes et les pages des utilisateurs. Les informations contenues dans le cookie peuvent être lues par l'application web à chaque fois que l'utilisateur visite le site. Principes de base du fonctionnement des cookies Si un utilisateur revient sur une page du site et saisit l'URL www.*****.com, le navigateur recherche un cookie associé à cette URL sur le disque dur local. Si le cookie existe, le navigateur l'envoie à votre site avec la demande de page. Quelles sont les utilisations des cookies ? L'objectif le plus fondamental est le suivant : Les cookies peuvent aider les sites Web à enregistrer des informations sur les visiteurs. Plus généralement, les cookies sont un moyen de maintenir la continuité des applications Web (c'est-à-dire d'effectuer une « gestion de l'état »).

1 Le client exécute le programme et demande au serveur de le faire. renvoyer une requête De ce fait, un cookie est généré au client, le cookie apparaîtra donc lors du deuxième rafraîchissement
2. La session est stockée en mémoire, et le cookie de session existe en même temps que le processus, mais à ce moment-là, le serveur enregistre toujours. Le fichier de session doit définir l'heure de suppression du fichier de session
3. Cookie enregistre certaines informations dans le fichier Cookie local et le fichier Cookie enregistre les paires clé-valeur. Les fichiers cookies sont stockés dans les répertoires Document et Paramètres/Nom d'utilisateur du disque système de votre ordinateur local. Si le nom du site Web que vous visitez est www.abc.com, le nom du fichier cookie est généralement username@abc.com. Vous pouvez ouvrir le dossier et y jeter un œil. Le getName que vous avez mentionné obtient la valeur clé d'un cookie stocké dans le fichier cookie.

Nous savons que la session est une méthode permettant de conserver les données de session utilisateur côté serveur, et le cookie correspondant sert à conserver les données utilisateur côté client. Le protocole HTTP est un protocole sans état. Une fois que le serveur a répondu, il perd le contact avec le navigateur. Au plus tôt, Netscape a introduit des cookies dans le navigateur afin que les données puissent être échangées entre les pages par le client. Alors, comment le serveur mémorise-t-il les sessions ? de nombreux utilisateurs ? Qu’en est-il des données ?
Tout d'abord, le client et le serveur doivent être contactés un à un. Chaque client doit avoir un identifiant unique pour que le serveur puisse l'identifier. Il est recommandé d'avoir deux méthodes d'identification unique : cookie ou spécifiée via GET. La configuration par défaut de PHP créera un cookie nommé "PHPSESSID" lors de l'utilisation d'une session (peut être spécifié en modifiant la valeur session.name dans php.ini Si le client désactive les cookies, vous pouvez également spécifier de transmettre l'identifiant de session à). via GET Server (modifiez les paramètres tels que session.use_trans_sid dans php.ini).
Quand nous regardons le répertoire session.save_path côté serveur, nous trouverons de nombreux fichiers similaires à sess_vv9lpgf0nmkurgvkba1vbvj915. Il s'agit en fait des données correspondant à l'identifiant de session "vv9lpgf0nmkurgvkba1vbvj915". au serveur, et le serveur utilise l'identifiant de session. Recherchez le fichier correspondant, désérialisez le contenu du fichier lors de la lecture et obtenez la valeur de la session. Lors de l'enregistrement, sérialisez-le d'abord, puis écrivez-le 3. HttpSession

<. 🎜>

1. Concept

1)

Signification : Dans l'environnement de développement Web, session fait référence à un type utilisé sur le client La solution de maintien de l'état avec le serveur est parfois utilisé pour faire référence à la structure de stockage de cette solution. Conserver les informations sur l'état HTTP. Vérifiez si la requête du client contient un identifiant de session (c'est-à-dire un ID de session), c'est-à-dire si la requête contient

un

cookie <. 🎜> nommé "JESESSIONID" avec une valeur de sessionID

S'il existe déjà, récupérez-le et utilisez-le,

  • Sinon, créez une session pour ce client, générez un identifiant de session associé à cette session, et transmettez-le à la requête en utilisant la méthode set-cookie. Ensuite, la requête suivante sera utilisée. Ce sessionID est passé en valeur dans le cookie nommé « JESESSIONID ».

  • 4) Méthode de sauvegarde : La plus couramment utilisée est la sauvegarde avec des cookies. Mais si Cokkie est désactivé, il doit y avoir un autre mécanisme de préservation. Tel que la réécriture d'URL : ajoutez l'ID de session à la fin du chemin de l'URL.

    5) Remarque : Comme il est généralement enregistré avec des cookies, si vous rendez le cookie persistant, vous pouvez l'obtenir même après le redémarrage de l'ID de session du navigateur.

    //用持久化cookie保存sessionIDCookie cookie = new Cookie("JESESSIONID",session.getId());
    cookie.setMaxAge(20);
    response.addCookie(cookie);

    2. Création de séance

    1) Attribut de session  :

    • Si l'attribut de session spécifié par la page est vrai par défaut, alors c'est la première fois que vous accédez à une JSP d'une page d'application WEB, la page doit avoir un objet Session associé à cette requête.

    • Sinon, la page JSP ne nécessitera pas qu'il y ait un objet Session associé à la page JSP actuelle, donc une session ne sera pas créée lorsque la JSP La page est consultée pour la première fois.

    2) request.getSession(drapeau booléen) :

    • true, un objet HttpSession sera renvoyé. S'il existe déjà un objet HttpSession associé à la page JSP actuelle, renvoyez-le directement sinon, créez-en un nouveau.

    • false, s'il n'y a pas d'objet HttpSession associé à la page JSP actuelle, renvoie null, sinon renvoie l'objet HttpSession obtenu.

    • request.getSession() est équivalent à request.getSession(true).

    3. Destruction de l'objet Session

    1) Appeler HttpSession invalide () méthode.

    2) La HttpSession est automatiquement détruite après le délai d'expiration Vous pouvez configurer la durée maximale de la session dans le fichier web.xml de Tomcat, en minutes.

    <!-- apache-tomcat-x.x.xx\conf\web.xml --><session-config><session-timeout>30</session-timeout></session-config></p>
    <p> </p>
    <p><span style="color: #000000"><em>相关方法签名:</em></span></p>
    <ul class=" list-paddingleft-2">
    <li><p><span style="color: #000000">int getMaxInactiveInterval()                         //返回最大时效,单位:秒</span></p></li>
    <li><p><span style="color: #000000">void setMaxInactiveInterval(int interval)      //设置最大时效</span></p></li>
    </ul>
    <p><span style="color: #000000">3)服务器卸载当前 WEB 应用。</span></p>
    <p> </p>
    <h2><span style="color: #000000">4.Session相关方法</span></h2>
    <p><span style="color: #000000">String getId()                                                       //得到sessionID</span></p>
    <p><span style="color: #000000">boolean isNew()                                                  //该session是不是新创建的<br></span></p>
    <p><span style="color: #000000">long getCreationTime()                                       //该session被创建的时间<br></span></p>
    <p><span style="color: #000000">long getLastAccessedTime()                              //该session最后一次被访问的时间</span></p>
    <p><span style="color: #000000">void <span style="color: #ff0000">setAttribute</span>(String key, Object value)         //存放值,相当于哈希表<br></span></p>
    <p><span style="color: #000000">Object <span style="color: #ff0000">getAttrbute</span>(String key)                           //根据键从session中取得对应的值</span></p>
    <p> </p>
    <h2><span style="color: #000000">5.URL重写实现Session跟踪</span></h2>
    <p><span style="color: #000000"><em>方法签名:</em>String encodeURL(String url)  //该方法会在URL后面加上sessionID</span></p>
    <div class="cnblogs_code"><pre class="brush:php;toolbar:false">重新登录
    重新登录

     

    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