ホームページ  >  記事  >  Java  >  Java がブラウザー Cookie を読み書きする方法の詳細な例

Java がブラウザー Cookie を読み書きする方法の詳細な例

高洛峰
高洛峰オリジナル
2017-01-18 13:59:301336ブラウズ

まず第一に、Cookie とは何かを理解しましょう:

Cookie は実際にはハードドライブに保存されているデータですが、これらのデータは非常に特殊であり、Web アプリケーションによって保存するためにブラウザーにのみ送信できます。また、ブラウザーのデータを読み取ることもできます。 Cookie

Web アプリケーションは通常、一部のユーザー情報などの少量の一時データのみを Cookie に保存します。一般的なブラウザでは、各 Web アプリケーションにデータを 40 個提供します。各 Cookie のサイズは 4K を超えません (一部のブラウザの Cookie は大量のデータを保存できると聞きましたが、データ抽出の効率が高くなくパフォーマンスに影響するため、通常はそのような大量のデータを保存しません)

くだらない話をした後、ようやく重要なポイントが来ます

Java は、httpServletRequest インターフェースを介してブラウザーリクエスト内の Cookie データにアクセスします (ここで、まず Cookie の詳細を理解しましょう。コードは後で説明します)

各 Cookieキー、値の 2 つの属性があります (特定の形式文字列がないため、データを DIY で保存できますが、URL エンコードの問題に注意してください。エンコードの問題については、後でコードで説明します)

新しい Cookie を保存する必要がある場合、新しい Cookie インスタンスを作成し、httpservletRsponse 経由でブラウザに送信し、ローカルに保存できます

以下は Cookie の一般的なクラスです

/*
 * 该类可以从浏览器请求中提取出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;
  }

上記の一般的なクラスを使用して、新しい Cookie を読み取って作成できます。もう 1 つ言及したいことがあります: 新しい Cookie を作成する方法 名前がブラウザーにすでに存在する場合、その名前は再度追加されず、前の Cookie が上書きされます。ブラウザーは要求された Cookie と返された Cookie をどのように表示しますか? Google Chrome を例に挙げます

その後、Cookie を削除する必要がある場合があります

/**
    * <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);
       }
      }
  }
Java 是如何读取和写入浏览器Cookies的实例详解

Cookie を削除するには、時間パラメータとパスパラメータの両方が必要であることに注意してください。そうでないと、ブラウザによっては削除できません

上記は Java の読み取りです。ブラウザの Cookie を取得および書き込むためのデータを提供し、今後も関連情報を追加していきます。このサイトをご支援いただきありがとうございます。

Java がブラウザー Cookie を読み書きする方法の詳細な例については、PHP 中国語 Web サイトの関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。