クッキーの詳細


1.一度に複数のCookieを送信できますか

回答:はい!複数のcookieオブジェクトを作成できます。メソッドを使用してresponse複数回呼び出しaddCookieて送信cookieするだけです。次の実験を行います。

2つ作成HttpServletし、最初の1HttpServlet送信ますCookie

@WebServlet("/cookieDemo3")
public class CookieDemo3 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //新建三个cookie,并通过response发送出去
        Cookie cookie1 = new Cookie("msg","hello");
        Cookie cookie2 = new Cookie("name","zhangsan");
        Cookie cookie3 = new Cookie("sex","male");
        response.addCookie(cookie1);
        response.addCookie(cookie2);
        response.addCookie(cookie3);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

2つ目はHttpServer、受け入れcookieて、コンソールに出力します。

@WebServlet("/cookieDemo2")
public class CookieDemo2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //3. 获取Cookie,拿到数据
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
    
    
            for (Cookie cookie : cookies) {
    
    
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println(name + " : " + value);
            }
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

サーバーを実行すると、コンソール出力は次のようになります。
ここに画像の説明を挿入

2.ブラウザに保存されるCookieの長さ

デフォルトでは、ブラウザを閉じるとCookieデータは破棄されます。

しかしCookie、永続ストレージを設定することはできます、彼にはsetMaxAge(int seconds)方法があります

このメソッドのパラメーターには、次の3つの状況があります。

  • 正の数:Cookie永続ストレージ用にハードディスク上のファイルにデータを書き込みます。この正のパラメーターはcookie存続時間です。
  • 負の数:デフォルト値。あまり意味がありません。
  • ゼロ:削除されたCookie情報

パラメータが正の数の場合を示しましょう。

新しいものを作成しHttpServlet、永続ストレージ時間をに設定して1000秒、以下を送信します。

@WebServlet("/cookieDemo4")
public class CookieDemo4 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //新建一个Cookie,并设置持久化存储时间为1000秒
        Cookie cookie = new Cookie("msg","hello");
        //设置持久化存储时间
        cookie.setMaxAge(1000);
        //发送cookie
        response.addCookie(cookie);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

サーバーを実行し、最初にアクセス/cookieDemo4してからアクセスし/cookieDemo2(これはcookieコンソールに情報を出力するためです)、ブラウザーを閉じて再度開きcookieDemo2ますcookie。次の
ここに画像の説明を挿入
2つのアクセス結果も取得できます

3.クッキーは中国語で保存できますか?

回答:tomcat 8以前は、cookie中国語のデータを中国語で直接保存することはできず中国語のデータをトランスコードする必要がありました(通常はURLエンコード)

その後tomcat 8cookie中国のデータをサポートします

読者は自分で実験することができます

4、Cookie共有の問題

この質問はより詳細です。tomcatサーバーに複数のwebプロジェクトが展開されていると仮定するとこれらのwebプロジェクトcookieを共有できますか?

回答:デフォルトcookieでは共有できません

ただしcookie、共有を設定するsetPath(String path)方法cookieがあります。つまり、この方法設定された取得範囲です。デフォルトでは、値は現在のプロジェクトの仮想ディレクトリです。共有する場合は、にpath設定一根/します。

デモンストレーション:

新しいものを作成し、HttpServletこのクラスで送信してCookie、グローバル共有を設定します。

@WebServlet("/cookieDemo5")
public class CookieDemo5 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //新建一个Cookie,并设置持久化存储时间为1000秒
        Cookie cookie = new Cookie("msg", "你好");
        //设置共享
        cookie.setPath("/");
        //发送cookie
        response.addCookie(cookie);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

新しいプロジェクトをcookie作成し、出力情報クラスをコピーし、文を追加します。2番目のプロジェクト:

以下のサーバーを実行し、最初に送信されたcookieプロジェクトを実行してから、新しく作成されたプロジェクトにアクセスします。出力は次のとおりです。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/lesileqin/article/details/112673163