まず第一に、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); } } }
Cookie を削除するには、時間パラメータとパスパラメータの両方が必要であることに注意してください。そうでないと、ブラウザによっては削除できません
上記は Java の読み取りです。ブラウザの Cookie を取得および書き込むためのデータを提供し、今後も関連情報を追加していきます。このサイトをご支援いただきありがとうございます。
Java がブラウザー Cookie を読み書きする方法の詳細な例については、PHP 中国語 Web サイトの関連記事に注目してください。