Maison  >  Article  >  Java  >  Comment utiliser les cookies et la technologie de session en Java

Comment utiliser les cookies et la technologie de session en Java

王林
王林avant
2023-04-23 18:55:071203parcourir

    Solution au protocole http sans état :

    HTTP est un protocole sans état. Les protocoles sans état n'exigent pas que le serveur conserve des informations ou des états sur chaque utilisateur lors de plusieurs requêtes.

    Mais certaines applications Web peuvent devoir suivre la progression de l'utilisateur d'une page à une autre, par exemple lorsque le serveur Web doit personnaliser le contenu de la page Web pour l'utilisateur. Les solutions à ces situations incluent :

    • Utilisation de cookies HTTP.

    • Session côté serveur.

    • Variable cachée (lorsque la page actuelle contient un formulaire)

    • Réécriture d'URL à l'aide de paramètres codés en URI, par exemple /index.php?session_id=some_unique_session_code.

    La raison pour laquelle le protocole a été rendu apatride est que le serveur n'a pas besoin de suivre l'état de plusieurs requêtes, et non qu'il ne puisse pas le faire s'il le souhaite. Cela simplifie le contrat entre le client et le serveur et, dans de nombreux cas (comme par exemple la fourniture de données statiques via un CDN), minimise la quantité de données à transférer. Si le serveur doit maintenir l'état d'accès client, la structure permettant d'émettre et de répondre aux demandes sera plus complexe. En fait, la simplicité du modèle est l’une de ses plus grandes caractéristiques.

    1. Cookie

    1. Le concept de cookie

    Le cookie est une technologie de session qui est créée et maintenue sur le serveur mais enregistrée côté navigateur

    Scénarios d'application de cookies : mémorisez le nom d'utilisateur et le mot de passe, pas besoin de vous connecter. pendant sept jours

    2. Création de cookies

    //创建cookie
    Cookie cookie = new Cookie("username", "admin");
    //将cookie响应到浏览器
    response.addCookie(cookie);

    Comment les cookies sont représentés dans les messages :

    Si un cookie est créé sur le serveur et répond au navigateur, le message de réponse apparaîtra : Set-Cookie: username=admin

    Après cela, chaque fois que le navigateur enverra une requête au serveur, il transportera ce cookie, et il apparaîtra dans le message de demande : Cookie : username=admin

    Après avoir répondu au cookie du navigateur, il sera stocké dans la mémoire courante du navigateur, lorsque le navigateur est fermé, la mémoire courante du navigateur sera libérée, les cookies seront donc effacés. Par conséquent, la durée de validité par défaut de la session va du moment où le navigateur est ouvert jusqu'au moment où le navigateur est fermé

    3 Obtenez le cookie

    //获取浏览器发送请求所携带的所有cookie
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName() + "," + cookie.getValue());
        }
    }

    4 Modifiez le cookie

    a> format de valeur, il vous suffit d'en créer des différents avec la même clé. Si vous répondez au navigateur, la valeur du cookie correspondant sera écrasée

    b>Utilisez cookie.setValue()

    /*Cookie cookie = new Cookie("username", "root");
    response.addCookie(cookie);*/
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for (Cookie cookie : cookies) {
            if(cookie.getName().equals("username")){
                cookie.setValue("zhangsan");
                response.addCookie(cookie);
            }
        }
    }

    5. le cookie

    Après avoir répondu au cookie du navigateur, il sera enregistré dans la mémoire courante du navigateur, lorsque le navigateur est fermé, la mémoire courante du navigateur sera libérée, le cookie sera donc effacé. Par conséquent, la durée de validité par défaut de la session va du moment où le navigateur est ouvert jusqu'au moment où le navigateur est fermé

    Mais la durée de validité du cookie peut être définie via cookie.setMaxAge()

    a> time est un entier négatif, il n'y a aucun effet, c'est-à-dire la durée de validité Ouvrez le navigateur pour fermer le navigateur

    b> Lorsque la durée de validité définie est 0, cela signifie que le cookie est immédiatement supprimé

    c> la durée de validité définie est un entier positif

    Si la durée de validité est inférieure à une session, le cookie a expiré. Après la durée spécifiée, il sera automatiquement supprimé de la mémoire en cours d'exécution

    Si la durée effective est supérieure à une session, lorsque le navigateur est fermé, les données du cookie seront enregistrées sur le disque. Lorsque le navigateur sera à nouveau ouvert, les données du disque seront restaurées dans la mémoire courante

    6. cookie.setPath();

    Lorsque le cookie est créé et répondu au navigateur, le cookie avec le chemin effectif est défini, uniquement lors de l'accès au chemin spécifié. Le cookie sera transporté

    Session

    1. de session

    session est une technologie de session qui est créée et maintenue sur le serveur et enregistrée côté serveur

    Scénarios d'application de session : enregistrement du statut de connexion de l'utilisateur

    2, Observez les changements dans le message lors de l'obtention de la session

    Obtenez l'objet de session via request.getSession()

    Lorsque request.getSession() est accédé pour la première fois dans cette session pour obtenir l'objet de session, une clé apparaîtra dans le message de réponse. Il s'agit d'un cookie JSESSIONID

    Chaque chaque fois qu'une requête est envoyée au serveur via le navigateur, elle transportera ce cookie JSESSIONID

    Même lors de l'accès au serveur, utilisez request.getSession() pour obtenir à nouveau l'objet de session, tant qu'il y a JSESSIONID dans le cookie du message de requête , ce cookie n'apparaîtra plus dans le message de réponse

    3. Le principe de la séance

    Q :

    Le principe de la séance ?

    Quelle est la relation entre la session et les cookies ?

    Pourquoi obtient-on les mêmes séances en une seule séance ?

    Réponse :

    Lorsque la session est obtenue via request.getSession(), le cookie avec la clé JSESSIONID dans le message de requête sera obtenu

    S'il n'y a pas de cookie avec la clé JSESSIONID dans le message de requête, cela signifie. que la session en cours vient de démarrer, c'est la première fois que l'on obtient l'objet de session dans la session en cours. À ce moment, l'objet de session sera créé à l'intérieur du serveur, et un cookie sera créé avec la clé JSESSIONID et la valeur une séquence aléatoire d'UUID, puis l'objet de session créé sera stocké dans une collection de cartes maintenue par le serveur. avec la séquence aléatoire UUID comme clé, en utilisant l'objet de session comme valeur, et répond enfin au cookie de JSESSIONID au navigateur

    若请求报文中存在键为JSESSIONID的cookie,此时获取该cookie的值,即UUID随机序列,以UUID随机序列为键,从服务器所维护的map集合中就可以获取唯一的session对象

    4、session的常用方法

    4.1、session存在域对象的数据

    void setAttribute(String name, Object value);

    Object getAttribute(String name);

    void removeAttribute(String name);

    4.2、设置session的时效

    session的时效指在指定时间内,若没有对session进行任何的操作,此时session会自动失效

    a>通过web.xml设置,单位是分钟

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    b>通过session.setMaxInactiveInterval()设置,单位是秒

    session.setMaxInactiveInterval(1800);
    4.3、强制使session失效

    session.invalidate()

    5、session的钝化和活化

    session的钝化指服务器关闭,但是浏览器没有关闭,此时session中的数据会被序列化到磁盘上

    session的活化指服务器启动,并且浏览器仍然没有关闭,此时会将序列化到磁盘上的数据重新加载到内存中

    注意:若session中存储的是实体类对象,此时若要钝化,则该实体类和该实体类的成员变量也都要实现序列化的接口

    三、cookie和session的区别

    1、cookie存储在浏览器端,session存储在服务器端,因此cookie相对而言不安全

    2、cookie只能存储字符串类型的键值对,session可以存储任意类型的数据,因此若存储相同的数据,cookie可能会产生大量的cookie

    3、由于每次浏览器发送请求都会携带cookie,若有大量的cookie,就会造成网络负担

    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:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer