Heim  >  Artikel  >  Java  >  Detailliertes Beispiel dafür, wie Java Browser-Cookies liest und schreibt

Detailliertes Beispiel dafür, wie Java Browser-Cookies liest und schreibt

高洛峰
高洛峰Original
2017-01-18 13:59:301344Durchsuche

Lassen Sie uns zunächst verstehen, was Cookies sind:

Cookies sind eigentlich Daten, die auf Ihrer Festplatte gespeichert werden. Diese Daten sind jedoch sehr speziell und können nur von Webanwendungen an den Browser zur Speicherung übermittelt werden Wir können auch Browser-Cookies lesen

Webanwendungen speichern im Allgemeinen nur eine kleine Menge temporärer Daten, wie z. B. einige Benutzerinformationen. Wenn die Datenmenge groß ist, ist sie nicht für die Speicherung in Cookies geeignet

Allgemeine Browser sind nicht geeignet. Jede Webanwendung erhält 40 Cookies zum Speichern von Daten, und die Größe jedes Cookies überschreitet 4 KB nicht (ich habe gehört, dass einige Browser-Cookies große Datenmengen speichern können, aber wir im Allgemeinen Speichern Sie keine so großen Datenmengen, da die Effizienz der Datenextraktion nicht hoch ist und die Leistung beeinträchtigt.)

Nachdem so viel Unsinn geredet wurde, kommt endlich der Punkt

Java greift auf die Cookie-Daten zu in der Browseranforderung über die httpServletRequest-Schnittstelle (hier Lassen Sie uns zunächst die Vor- und Nachteile von Cookies verstehen, der Code wird später gegeben)

Jedes Cookie hat zwei Attribute: Schlüssel, Wert (keine spezifische Formatzeichenfolge, also Sie Sie können Daten selbst speichern, achten Sie jedoch auf URL-Codierungsprobleme. Das Codierungsproblem wird später mit dem Code besprochen.)

Wenn wir ein neues Cookie speichern müssen, können wir eine neue Cookie-Instanz erstellen und diese senden über httpserletRsponse an den Browser senden und dann lokal speichern

Wie unten angegeben Eine allgemeine Klasse von Cookies

/*
 * 该类可以从浏览器请求中提取出cookies并进行对cookis的相关操作
 * 
 */
 
public class CookiesUtil extends BaseController {
   
  /**
   * 根据名字获取cookie
   * 
   * @param request
   * @param name
   *      cookie名字
   * @return
   */
  public static Cookie getCookieByName(HttpServletRequest request, String name) {
    Map<String, Cookie> cookieMap = ReadCookieMap(request);
    if (cookieMap.containsKey(name)) {
      Cookie cookie = (Cookie) cookieMap.get(name);
      return cookie;
    } else {
      return null;
    }
  }
 
  /**
   * 将cookie封装到Map里面
   * 
   * @param request
   * @return
   */
  private static Map<String, Cookie> ReadCookieMap(HttpServletRequest request) {
    Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
    Cookie[] cookies = request.getCookies();
    if (null != cookies) {
      for (Cookie cookie : cookies) {
        cookieMap.put(cookie.getName(), cookie);
      }
    }
    return cookieMap;
  }
 
  /**
   * 保存Cookies
   * 
   * @param response
   *      servlet请求
   * @param value
   *      保存值
   * @author jxf
   */
  public static HttpServletResponse setCookie(HttpServletResponse response, String name, String value,int time) {
    // new一个Cookie对象,键值对为参数
    Cookie cookie = new Cookie(name, value);
    // tomcat下多应用共享
    cookie.setPath("/");
    // 如果cookie的值中含有中文时,需要对cookie进行编码,不然会产生乱码
    try {
      URLEncoder.encode(value, "utf-8");
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    cookie.setMaxAge(time);
    // 将Cookie添加到Response中,使之生效
    response.addCookie(cookie); // addCookie后,如果已经存在相同名字的cookie,则最新的覆盖旧的cookie
    return response;
  }

Mit der oben genannten allgemeinen Klasse können wir neue Cookies lesen und erstellen. Hier würde ich Ich möchte noch etwas erwähnen: Wenn der Name des neuen Cookies bereits im Browser vorhanden ist, wird er nicht mehr angezeigt. Durch wiederholtes Hinzufügen wird das vorherige Cookie überschrieben.

Wie sieht der Browser die angeforderten und zurückgegebenen Cookies? Nehmen Sie als Beispiel Google Chrome

Java 是如何读取和写入浏览器Cookies的实例详解

Dann müssen wir möglicherweise Cookies löschen

/**
    * <p>删除无效cookie</p>
    * <p>无效?1.过时 2.未发布</p>
    * @param request
    * @param response
    * @param list
    */
   private void delectCookieByName(HttpServletRequest request, HttpServletResponse response,String deleteKey) throws NullPointerException {12     Map<String, Cookie> cookieMap = ReadCookieMap(request);17     for (String key : cookieMap.keySet()) { 
       if(key==deleteKey && key.equals(deleteKey)) {
         Cookie cookie = cookieMap.get(key);21         cookie.setMaxAge(0);//设置cookie有效时间为0
         cookie.setPath("/");//不设置存储路径
         response.addCookie(cookie);
       }
      }
  }

Achten Sie darauf, Cookies zu löschen. Sie müssen haben sowohl Zeit- als auch Pfadparameter, sonst können einige Browser sie nicht löschen.

Das Obige ist die Datenerfassung von Java-Lese- und Schreibbrowser-Cookies. Wir werden auch in Zukunft relevante Informationen hinzufügen diese Seite!

Ausführlichere Beispiele, wie Java Browser-Cookies liest und schreibt, finden Sie auf der chinesischen PHP-Website für verwandte Artikel!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn