JavaWeb Hinweis 4: Sitzungstechnologie-Cookie und -Sitzung

Konversationstechnologie

Was sind Konversationstechnologien? Wo speichert der Benutzer beispielsweise im Shopping-System der Website die gekauften Produktinformationen? Da das HTTP-Protokoll zustandslos ist, dh wenn jeder Client auf serverseitige Ressourcen zugreift, weiß der Server nicht, wer der Client ist. Daher ist Sitzungstechnologie erforderlich, um den Status des Clients zu identifizieren. Die Sitzungstechnologie soll dem Server helfen, sich an den Client-Status zu erinnern (den Client zu unterscheiden).

Der gesamte Vorgang vom Öffnen eines Browsers zum Besuch einer bestimmten Website bis zum Schließen des Browsers wird als Sitzung bezeichnet. Die Sitzungstechnologie dient dazu, den Status und die Daten des Clients in dieser Sitzung aufzuzeichnen. Die Sitzungstechnologie ist in Cookie und Sitzung unterteilt:

Cookie: Die Daten werden lokal auf der Clientseite gespeichert, wodurch der Speicherdruck auf der Serverseite verringert wird. Die Sicherheit ist nicht gut und die Clientseite kann das Cookie löschen.

Sitzung: Speichern Sie Daten auf der Serverseite, was eine relativ gute Sicherheit bietet und den Druck auf den Server erhöht.

Cookie-Technologie

Cookie-Technologie ist eine Technologie, die Benutzerdaten an den Client speichert. Wir lernen auf zwei Arten:

Der Server sendet ein Cookie an den Client

  1. Erstellen Sie ein Cookie: Cookie cookie = new Cookie(String cookieName,String cookieValue); ,Beispiel: Cookie cookie = new Cookie("username","zhangsan");Dann wird das Cookie in Form eines Antwortheaders an den Client gesendet. Beachten Sie, dass Chinesisch nicht in Cookies gespeichert werden kann.
  2. Legen Sie die Persistenzzeit des Cookies auf dem Client fest: cookie.setMaxAge(int seconds);- Zeit in Sekunden. Beachten Sie, dass das Cookie im Speicher des Browsers gespeichert wird und der Browser die Zerstörung von Cookie-Informationen schließt (Cookie auf Sitzungsebene), wenn die Persistenzzeit nicht festgelegt ist. Wenn die Persistenzzeit festgelegt ist, werden die Cookie-Informationen in der Festplattendatei des Browsers gespeichert. Beispiel: cookie.setMaxAge(10*60); , legen Sie die Speicherzeit der Cookie-Informationen in der Festplattendatei des Browsers auf 10 Minuten fest, und der abgelaufene Browser löscht die Cookie-Informationen automatisch.
  3. Legen Sie den Übertragungspfad des Cookies fest: cookie.setPath(String path);Beachten Sie, dass, wenn der Übertragungspfad nicht festgelegt ist, die Cookie-Informationen die Cookie-Informationen auf dem Pfad übertragen, auf den auf die Webressource zugegriffen wird, die das Cookie generiert hat. Beispiel: cookie.setPath("/WEB16"); bedeutet, dass jede Ressource, auf die in der WEB16-Anwendung zugegriffen wird, ein Cookie enthält. cookie.setPath("/WEB16/cookieServlet"); bedeutet, dass die Cookie-Informationen nur übertragen werden, wenn auf das cookieServlet in WEB16 zugegriffen wird.
  4. Cookie an den Kunden senden:response.addCookie(Cookie cookie);
  5. Cookie des Clients löschen: Wenn Sie die gespeicherten Cookie-Informationen auf dem Client löschen möchten, können Sie diese mit einem Cookie mit demselben Namen und demselben Pfad und einer Persistenzzeit von 0 überschreiben
//设置cookie的最大有效时间
//cookie.setMaxAge(60*60);
//设置为-1 , 就是相当于默认有效时间, 浏览器关闭就消失.
//cookie.setMaxAge(-1);
// 标示cookie的有效时间为0.发送到浏览器就消失了.
//利用有效时间为0 这件事,我们可以做删除cookie的操作.
// 因为同一个路径 ,不能存在相同的cookie(键相同).
// 我们可以通过覆盖的方式,设置有效时间为0. 删除cookie
//cookie.setMaxAge(0);

Das vollständige Codebeispiel zum Senden von Cookies lautet wie folgt:

//1、创建cookie对象
Cookie cookie = new Cookie("name","zhangsan");

//1.1 为cookie设置持久化时间 ---- cookie信息在硬盘上保存的时间
cookie.setMaxAge(10*60);//10分钟 ---- 时间设置为0代表删除该cookie
//1.2 为cookie设置携带的路径
//cookie.setPath("/WEB16/sendCookie");//访问sendCookie资源时才携带这个cookie
cookie.setPath("/WEB16");//访问WEB16下的任何资源时都携带这个cookie
//cookie.setPath("/");//访问服务器下的所有的资源都携带这个cookie

//2、将cookie中存储的信息发送到客户端---头
response.addCookie(cookie);

Wie akzeptiert der Server das vom Client getragene Cookie?

Die Cookie-Informationen werden als Anforderungsheader an den Server gesendet:

1. Erhalten Sie alle Cookies auf Anfrage:

Cookie[] cookies = request.getCookies();

2. Durchlaufen Sie das Cookie-Array und erhalten Sie das gewünschte Cookie anhand des Cookie-Namens

 for(Cookie cookie : cookies){
    
    
     if(cookie.getName().equal(cookieName)){
    
    
          String cookieValue = cookie.getValue();
    }
}

Vollständiges Beispiel:

//获得客户端携带的cookie的数据
Cookie[] cookies = request.getCookies();
//Cookie cookie = new Cookie("name","zhangsan");
//通过cookie名称获得想要的cookie
if(cookies!=null){
    
    
    for(Cookie cookie : cookies){
    
    
        //获得cookie的名称
        String cookieName = cookie.getName();
        if(cookieName.equals("name")){
    
    
            //获得该cookie的值
            String cookieValue = cookie.getValue();
            System.out.println(cookieValue);
        }
    }
}

Übung: Ermitteln Sie die Uhrzeit des letzten Besuchs des Benutzers

//获得当前时间
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String currentTime = format.format(date);

//1、创建Cookie 记录当前的最新的访问时间
Cookie cookie = new Cookie("lastAccessTime",currentTime);
cookie.setMaxAge(60*10*500);
response.addCookie(cookie);

//2、获得客户端携带cookie ---- lastAccessTime
String lastAccessTime = null;
Cookie[] cookies = request.getCookies();
if(cookies!=null){
    
    
    for(Cookie coo : cookies){
    
    
        if("lastAccessTime".equals(coo.getName())){
    
    
            lastAccessTime = coo.getValue();
        }
    }
}

response.setContentType("text/html;charset=UTF-8");
if(lastAccessTime==null){
    
    
    response.getWriter().write("您是第一次访问");
}else{
    
    
    response.getWriter().write("您上次的访问的时间是:"+lastAccessTime);
}

Sitzungstechnologie

Die Sitzungstechnologie ist eine Technologie zum Speichern von Daten auf der Serverseite. Sie erstellt für jeden Client einen Speicherplatz zum Speichern von Kundendaten. Der Client muss jedoch jedes Mal eine Identifikations-ID mit sich führen, um seinen eigenen Speicherplatz auf dem Server zu finden. Daher basiert die Implementierung von Session auf Cookies, und Session muss Cookies verwenden, um die eindeutige Kennung des Kunden, JSESSIONID, zu speichern.

Holen Sie sich das Session-Objekt

HttpSession session = request.getSession();

Diese Methode ruft das Sitzungsobjekt exklusiv für die aktuelle Sitzung ab. Wenn der Server kein Sitzungsobjekt für die Sitzung hat, wird eine neue Sitzung erstellt und zurückgegeben. Wenn bereits eine Sitzung zu der Sitzung gehört, wird die vorhandene Sitzung verwendet direkt zurückgegeben werden (im Wesentlichen gemäß JSESSIONID. Bestimmen Sie, ob der Client bereits eine Sitzung auf dem Server hat)

So greifen Sie auf Sitzungsdaten zu (Sitzung ist auch ein Domänenobjekt)

Die Sitzung ist auch ein Regionsobjekt zum Speichern von Daten, daher verfügt das Sitzungsobjekt auch über die folgenden drei Methoden:

session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
HttpSession session = request.getSession();
        
    System.out.println(session.getCreationTime()); //创建时间
    System.out.println(session.getLastAccessedTime());//最后一次访问session的时间
    System.out.println(session.getId()  );//获得sessionID
    System.out.println(session.getMaxInactiveInterval());//获得最大存活时间
   //setMaxInactiveInterval(int interval)		   //invalidate 立即销毁session		   System.out.println(session.isNew());//查看当前获得的session是否是新的.只有在第一访问服务器,session是新的.		   session.invalidate();

Der Lebenszyklus des Session-Objekts

Erstellen: wird erstellt, wenn request.getSession() zum ersten Mal ausgeführt wird

zerstören:

Wann beginnt der
Ablauf/die Ungültigkeitserklärung der Sitzung (standardmäßig 30 Minuten), wenn der Server (ungewöhnlich) herunterfährt ? Starten Sie das Timing von nicht betriebenen serverseitigen Ressourcen, die in der web.xml des Projekts konfiguriert werden können

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

Sitzung manuell zerstören

session.invalidate();

Handlungsspielraum

Standardmäßig teilt sich in einer Sitzung jede Ressource in einer Sitzung ein Sitzungsobjekt.

Wenn der Browser geschlossen wird, wird die Sitzung zerstört?

Nein, die im Browser vorhandene eindeutige Kennung JSESSIONID (Sitzungs-ID) ist verschwunden, aber die auf dem Server gespeicherte Sitzungs-ID wurde nicht sofort zerstört.

  • Wenn mehrere Registerkarten gleichzeitig im selben Browser geöffnet werden und dieselbe oder verschiedene Anfragen gesendet werden, wird weiterhin dieselbe Sitzung verwendet.
  • Wenn derselbe Browser nicht im selben Fenster geöffnet wird, handelt es sich bei der Anfrage immer noch um dieselbe Sitzung.
  • Wenn Sie unterschiedliche Browser verwenden, handelt es sich beim Senden von Anfragen um eine unterschiedliche Sitzung, selbst wenn dieselbe Anfrage gesendet wird.
  • Wenn alle aktuellen Browserfenster geschlossen und wieder geöffnet werden und dieselbe Anfrage initiiert wird, handelt es sich um eine andere Sitzung.

Referenzen:
1. https://www.cnblogs.com/ginb/p/7227240.html

Acho que você gosta

Origin blog.csdn.net/weixin_42838061/article/details/121171907
Recomendado
Clasificación