Java の Javax.servlet.http.Cookie クラス

Java の Javax.servlet.http.Cookie クラス
多くの Web サイトは、Cookie と呼ばれる小さなテキスト文字列を使用して、接続間でクライアント側の状態を永続的に保存します。 Cookie はサーバーからクライアントに渡され、リクエストと応答の HTTP ヘッダーに入れられて再び戻されます。サーバーは Cookie を使用して、セッション ID、ショッピング カートの内容、ログイン認証情報、ユーザー設定などを示すことができます。

Cookie はどのように機能するのでしょうか?

クッキーはどのように機能するのでしょうか? 上の図からわかるように、ユーザーが最初にページをリクエストすると、サーバーはリソースとともに Cookie オブジェクトを送信し、クライアントのマシンに保存されます。このオブジェクトにはリクエストの詳細が含まれる場合があります。その後、ユーザーが同じリソースを再度リクエストすると、サーバーがユーザー エクスペリエンスをさらに向上させるために使用できる保存された Cookie がリクエストとともに送信されます。 クッキーの属性:
    名前 = 値のペア: これは、Cookie 内に保存されている実際の情報を示しています。名前にも値にも空白や次の文字を含めないでください。 [ ] ( ) = ' / ? @ : ; 有効な Cookie の名前と値のペアの例:
     Set-Cookie:session-id = 187-4969589-3049309 
    ドメイン: By default a cookie applies to the server it came from. If a cookie is originally set by www.foo.example.com the browser will only send the cookie back to www.foo.example.com. However a site can also indicate that a cookie applies within an entire subdomain not just at the original server. For example this request sets a user cookie for the entire foo.example.com domain: The browser will echo this cookie back not just to www.foo.example.com but also to lothar.foo.example.com eliza.foo.example.com enoch.foo.example.com and any other host somewhere in the foo.example.com domain. However a server can only set cookies for domains it immediately belongs to. www.foo.example.com cannot set a cookie for www.geeksforgeeks.org example.com or .com no matter how it sets the domain.
     Set-Cookie: user = geek ;Domain =.foo.example.com 
    パス: When requesting a document in the subtree from the same server the client echoes that cookie back. However it does not use the cookie in other directories on the site.
    Set-Cookie: user = geek; Path =/ restricted 
    有効期限: The browser should remove the cookie from its cache after that date has passed.
     Set-Cookie: user = geek; expires = Wed 21-Feb-2017 15:23:00 IST 
    最大年齢: This attribute sets the cookie to expire after a certain number of seconds have passed instead of at a specific moment. For instance this cookie expires one hour (3600 seconds) after it’s first set.
    Set-Cookie: user = 'geek'; Max-Age = 3600 
コンストラクタ : Creates a cookie with specified name-value pair.
  Syntax :   public Cookie(String name String value)   Parameters :   name : name of the cookie value : value associated with this cookie  
メソッド:
    setDomain() : Sets the domain in which this cookie is visible. Domains are explained in detail in the attributes of cookie part previously.
      Syntax :   public void setDomain(String pattern)   Parameters :   pattern : string representing the domain in which this cookie is visible. 
    getDomain() : Returns the domain in which this cookie is visible.
      Syntax :   public String getDomain() 
    setComment() : Specifies the purpose of this cookie.
      Syntax :   public void setComment(String purpose)   Parameters :   purpose : string representing the purpose of this cookie. 
    getコメント() : Returns the string representing purpose of this cookie.
      Syntax :   public String getComment() 
    setMaxAge() : Specifies the time (in seconds) elapsed before this cookie expires.
      Syntax :   public void setMaxAge(long time)   Parameters :   time : time in seconds before this cookie expires 
    getMaxAge() : Returns the max age component of this cookie.
      Syntax :   public String getMaxAge() 
    setPath() : Specifies a path for the cookie to which the client should return the cookie.
      Syntax :   public void setPath(String path)   Parameters :   path : path where this cookie is returned 
    getPath() : Returns the path component of this cookie.
      Syntax :   public String getMaxAge() 
    setSecure() : Indicated if secure protocol to be used while sending this cookie. Default value is false.
      Syntax :   public void setSecure(boolean secure)   Parameters:   secure - If true the cookie can only be sent over a secure protocol like https. If false it can be sent over any protocol. 
    getSecure() : Returns true if this cookie must be sent by a secure protocol otherwise false.
      Syntax :   public boolean getSecure() 
    getName() : Returns the name of the cookie.
       Syntax :   public String getName() 
    setValue() : Assigns new value to cookie after initialisation.
      Syntax :   public void setValue(String newValue)   Parameters :   newValue - a String specifying the new value 
    getValue : Returns the value of the cookie.
      Syntax :   public String getValue() 
    getVersion() : Returns 0 if the cookie complies with the original Netscape specification; 1 if the cookie complies with RFC 2965/2109
      Syntax :   public int getVersion() 
    setVersion() : Used to set the version of the cookie protocol this cookie uses.
      Syntax :  public void setVersion(int v)   Parameters :   v - 0 for original Netscape specification; 1 for RFC 2965/2109  
    クローン() : returns a copy of this cookie.
      Syntax :   public Cookie clone() 
Below is a Java implementation of a simple servlet program which stores a cookie in the browser when user first requests for it and then for further requests it displays the cookies stored. Java
   // Java program to illustrate methods   // of Cookie class   import     java.io.IOException  ;   import     java.io.PrintWriter  ;   import     java.util.List  ;   import     javax.servlet.ServletException  ;   import     javax.servlet.annotation.WebServlet  ;   import     javax.servlet.http.Cookie  ;   import     javax.servlet.http.HttpServlet  ;   import     javax.servlet.http.HttpServletRequest  ;   import     javax.servlet.http.HttpServletResponse  ;   /**    * Servlet implementation class cookieTest    */   @WebServlet  (  '/cookieTest'  )   public     class   cookieTest     extends     HttpServlet      {      private     static     final     long     serialVersionUID     =     1L  ;      /**    * @see HttpServlet#HttpServlet()    */      public     cookieTest  ()     {      super  ();      // TODO Auto-generated constructor stub      }      /**    * @see HttpServlet#doGet(HttpServletRequest request HttpServletResponse    * response)    */      protected     void     doGet  (  HttpServletRequest     request       HttpServletResponse     response  )      throws     ServletException       IOException         {      response  .  setContentType  (  'text/html'  );      // Create a new cookie with the name test cookie      // and value 123      Cookie     cookie     =     new     Cookie  (  'test_cookie'       '123'  );      // setComment() method      cookie  .  setComment  (  'Just for testing'  );      // setDomain() method      // cookie.setDomain('domain');      // setMaxAge() method      cookie  .  setMaxAge  (  3600  );      // setPath() method      cookie  .  setPath  (  '/articles'  );      // setSecure() method      cookie  .  setSecure  (  false  );      // setValue() method      cookie  .  setValue  (  '321'  );      // setVersion() method      cookie  .  setVersion  (  0  );      response  .  addCookie  (  cookie  );      PrintWriter     pw     =     response  .  getWriter  ();      pw  .  print  (  '     '  );      Cookie     ck  []     =     request  .  getCookies  ();      if     (  ck     ==     null  )     {      pw  .  print  (  ' 

This is first time the page is requested.

'
); pw . print ( '

And therefore no cookies found

'
); } else { pw . print ( '

Welcome Again...Cookies found

'
); for ( int i = 0 ; i < ck . length ; i ++ ) { // getName() method pw . print ( '

Name :' + ck [ i ] . getName () + '

'
); // getValue() method pw . print ( '

Value :' + ck [ i ] . getValue () + '

'
); // getDomain() method pw . print ( '

Domain :' + ck [ i ] . getDomain () + '

'
); // getPath() method pw . print ( '

Name :' + ck [ i ] . getPath () + '

'
); // getMaxAge() method pw . print ( '

Max Age :' + ck [ i ] . getMaxAge () + '

'
); // getComment() method pw . print ( '

Comment :' + ck [ i ] . getComment () + '

'
); // getSecure() method pw . print ( '

Name :' + ck [ i ] . getSecure () + '

'
); // getVersion() method pw . print ( '

Version :' + ck [ i ] . getVersion () + '

'
); } pw . print ( ' ' ); } pw . close (); } /** * @see HttpServlet#doPost(HttpServletRequest request HttpServletResponse * response) */ protected void doPost ( HttpServletRequest request HttpServletResponse response ) throws ServletException IOException { doGet ( request response ); } }
出力: 次の出力は Web ブラウザからのものです。 最初のリクエストの場合:
This is first time the page is requested. And therefore no cookies found. 
2 番目のリクエストの場合:
Welcome Again...Cookies found Name :test_cookie Value :321 Domain :null Name :null Max Age :-1 Comment :null Name :false Version :0 

上記のプログラムを実行するにはどうすればよいでしょうか?

まず、Apache Tomcat などのサーバーがインストールされており、Eclipse などの使用しているツールで構成されていることを確認します。使用しているサーバー ディレクトリの完全なアドレスを入力して、サーバー上またはローカル ブラウザ上で上記のプログラムを実行するだけです。 CookieTest サーブレットは、次の 3 つのタスクを実行するサーブレットです。
  1. まず、サーブレットは test_cookie という名前の Cookie を設定します。プログラム内の他の行では、ドメインの最大有効期間値などの Cookie の属性を設定します。
  2. 次に、サーブレットは request.getCookies を使用して、受信したすべての Cookie を検索し、それらの名前とその他の対応する属性を表示します。
  3. 最初のリクエストのように Cookie が見つからない場合は、ページへの初めての訪問であることを示す簡単な表示メッセージが表示されます。
参照: 公式 Java ドキュメント クイズの作成