Servletler - Çerezlerin Kullanımı

Çerezler, istemci bilgisayarda saklanan metin dosyalarıdır ve çeşitli bilgi takibi amacıyla saklanır. Java Servletler, HTTP tanımlama bilgilerini şeffaf bir şekilde destekler.

Geri dönen kullanıcıları belirlemenin üç adımı vardır:

  • Sunucu komut dosyası, tarayıcıya bir dizi çerez gönderir. Örneğin isim, yaş veya kimlik numarası vb.

  • Tarayıcı, bu bilgileri ileride kullanılmak üzere yerel makinede depolar.

  • Tarayıcı bir dahaki sefere web sunucusuna herhangi bir istek gönderdiğinde, bu tanımlama bilgilerini sunucuya gönderir ve sunucu, kullanıcıyı tanımlamak için bu bilgileri kullanır.

Bu bölüm size tanımlama bilgilerini nasıl ayarlayacağınızı veya sıfırlayacağınızı, bunlara nasıl erişeceğinizi ve nasıl sileceğinizi öğretecektir.

Bir Çerezin Anatomisi

Çerezler genellikle bir HTTP başlığında ayarlanır (bununla birlikte JavaScript, doğrudan bir tarayıcıya da bir çerez ayarlayabilir). Çerezi ayarlayan bir sunucu uygulaması şuna benzer başlıklar gönderebilir -

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT; 
   path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html

Gördüğünüz gibi, Set-Cookie başlığı bir ad-değer çifti, bir GMT tarihi, bir yol ve bir etki alanı içerir. Ad ve değer URL olarak kodlanacaktır. Son kullanma tarihi alanı, tarayıcıya verilen saat ve tarihten sonra çerezi "unutması" için bir talimattır.

Tarayıcı tanımlama bilgilerini depolayacak şekilde yapılandırılmışsa, bu bilgileri son kullanma tarihine kadar saklayacaktır. Kullanıcı, tarayıcıyı çerezin yolu ve etki alanıyla eşleşen herhangi bir sayfaya yönlendirirse, çerezi sunucuya yeniden gönderir. Tarayıcının başlıkları şunun gibi görünebilir -

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz

Daha sonra sunucu uygulaması, bir dizi Çerez nesnesi döndüren request.getCookies () istek yöntemi aracılığıyla çereze erişime sahip olacaktır .

Servlet Çerez Yöntemleri

Servlet'te çerezleri işlerken kullanabileceğiniz yararlı yöntemlerin listesi aşağıdadır.

Sr.No. Yöntem ve Açıklama
1

public void setDomain(String pattern)

Bu yöntem, örneğin tutorialspoint.com gibi tanımlama bilgisinin uygulandığı etki alanını ayarlar.

2

public String getDomain()

Bu yöntem, örneğin tutorialspoint.com gibi tanımlama bilgisinin uygulandığı alanı alır.

3

public void setMaxAge(int expiry)

Bu yöntem, tanımlama bilgisinin süresi dolmadan önce ne kadar zaman geçmesi gerektiğini (saniye cinsinden) belirler. Bunu ayarlamazsanız, çerez yalnızca mevcut oturum için geçerli olacaktır.

4

public int getMaxAge()

Bu yöntem, çerezin saniye cinsinden belirtilen maksimum yaşını döndürür, Varsayılan olarak -1, çerezin tarayıcı kapanana kadar devam edeceğini belirtir.

5

public String getName()

Bu yöntem çerezin adını döndürür. İsim oluşturulduktan sonra değiştirilemez.

6

public void setValue(String newValue)

Bu yöntem, çerezle ilişkilendirilen değeri ayarlar

7

public String getValue()

Bu yöntem, çerezle ilişkilendirilen değeri alır.

8

public void setPath(String uri)

Bu yöntem, bu tanımlama bilgisinin uygulanacağı yolu belirler. Bir yol belirtmezseniz, çerez, geçerli sayfayla aynı dizindeki tüm URL'ler ve tüm alt dizinler için döndürülür.

9

public String getPath()

Bu yöntem, bu çerezin uygulandığı yolu alır.

10

public void setSecure(boolean flag)

Bu yöntem, tanımlama bilgisinin yalnızca şifreli (yani SSL) bağlantılar üzerinden gönderilip gönderilmeyeceğini belirten boole değerini ayarlar.

11

public void setComment(String purpose)

Bu yöntem, bir tanımlama bilgisinin amacını açıklayan bir yorumu belirtir. Tarayıcının çerezi kullanıcıya sunması durumunda yorum yararlıdır.

12

public String getComment()

Bu yöntem, bu tanımlama bilgisinin amacını açıklayan yorumu döndürür veya tanımlama bilgisi yoksa boş bırakılır.

Servlet ile Çerezleri Ayarlama

Çerezleri sunucu uygulamasıyla ayarlamak üç adımdan oluşur -

(1) Creating a Cookie object - Çerez kurucusunu, her ikisi de dizelerden oluşan bir çerez adı ve çerez değeri ile çağırırsınız.

Cookie cookie = new Cookie("key","value");

Unutmayın, adın veya değerin beyaz boşluk veya aşağıdaki karakterlerden herhangi birini içermemesi gerekir -

[ ] ( ) = , " / ? @ : ;

(2) Setting the maximum age- Çerezin ne kadar süre (saniye olarak) geçerli olacağını belirtmek için setMaxAge kullanırsınız. Aşağıdaki, 24 saatlik bir çerez ayarlayacaktır.

cookie.setMaxAge(60 * 60 * 24);

(3) Sending the Cookie into the HTTP response headers - HTTP yanıt başlığına aşağıdaki gibi tanımlama bilgileri eklemek için response.addCookie'yi kullanırsınız -

response.addCookie(cookie);

Misal

Ad ve soyad için tanımlama bilgilerini ayarlamak için Form Örneğimizi değiştirelim .

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Create cookies for first and last names.      
      Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
      Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));

      // Set expiry date after 24 Hrs for both the cookies.
      firstName.setMaxAge(60*60*24);
      lastName.setMaxAge(60*60*24);

      // Add both the cookies in the response header.
      response.addCookie( firstName );
      response.addCookie( lastName );

      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Setting Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head>
               <title>" + title + "</title>
            </head>\n" +
            
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>
         </html>"
      );
   }
}

Yukarıdaki sunucu uygulamasını derleyin HelloForm ve web.xml dosyasında uygun girişi oluşturun ve son olarak servlet'i çağırmak için HTML sayfasını izlemeyi deneyin.

<html>
   <body>
      <form action = "HelloForm" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

HTML içeriğini Hello.htm dosyasında tutun ve <Tomcat-installationdirectory> / webapps / ROOT dizinine koyun. Ne zaman olur erişim http: // localhost: 8080 / Hello.htm , burada yukarıdaki form gerçek çıkışıdır.

Adı ve Soyadı girmeyi deneyin ve ardından gönder düğmesine tıklayın. Bu, ekranınızda adınızı ve soyadınızı görüntüler ve aynı zamanda, bir dahaki sefere Gönder düğmesine bastığınızda sunucuya geri gönderilecek olan FirstName ve LastName iki çerez ayarlayacaktır.

Sonraki bölüm, bu tanımlama bilgilerine web uygulamanıza nasıl erişeceğinizi açıklayacaktır.

Servlet ile Çerezleri Okuma

Çerezleri okumak için, bir dizi javax.servlet.http.Cookie nesnesi oluşturmalısınız .getCookies()HttpServletRequest yöntemi . Ardından dizi içinde dönün ve her çereze ve ilişkili değere erişmek için getName () ve getValue () yöntemlerini kullanın.

Misal

Önceki örnekte belirlediğimiz çerezleri okuyalım -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class ReadCookies extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      Cookie cookie = null;
      Cookie[] cookies = null;

      // Get an array of Cookies associated with this domain
      cookies = request.getCookies();

      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" );

      if( cookies != null ) {
         out.println("<h2> Found Cookies Name and Value</h2>");

         for (int i = 0; i < cookies.length; i++) {
            cookie = cookies[i];
            out.print("Name : " + cookie.getName( ) + ",  ");
            out.print("Value: " + cookie.getValue( ) + " <br/>");
         }
      } else {
         out.println("<h2>No cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

Sunucu uygulamasının üzerinde derleyin ReadCookiesve web.xml dosyasında uygun girişi oluşturun. First_name çerezini "John" ve last_name çerezini "Player" olarak ayarlasaydınız , http: // localhost: 8080 / ReadCookies çalıştırıldığında aşağıdaki sonuç görüntülenir -

Found Cookies Name and Value

Name : first_name, Value: John
Name : last_name, Value: Player

Servlet ile Çerezleri Sil

Çerezleri silmek çok basittir. Bir çerezi silmek istiyorsanız, aşağıdaki üç adımı izlemeniz yeterlidir -

  • Zaten var olan bir çerezi okuyun ve Çerez nesnesinde saklayın.

  • Kullanarak çerez yaşını sıfır olarak ayarlayın setMaxAge() mevcut bir çerezi silme yöntemi

  • Bu çerezi yanıt başlığına geri ekleyin.

Misal

Aşağıdaki örnek, "first_name" adlı mevcut tanımlama bilgisini siler ve bir dahaki sefere ReadCookies sunucu uygulamasını çalıştırdığınızda ilk_adı için boş değer döndürür.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class DeleteCookies extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      Cookie cookie = null;
      Cookie[] cookies = null;
         
      // Get an array of Cookies associated with this domain
      cookies = request.getCookies();

      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Delete Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" );
         
      if( cookies != null ) {
         out.println("<h2> Cookies Name and Value</h2>");

         for (int i = 0; i < cookies.length; i++) {
            cookie = cookies[i];

            if((cookie.getName( )).compareTo("first_name") == 0 ) {
               cookie.setMaxAge(0);
               response.addCookie(cookie);
               out.print("Deleted cookie : " + cookie.getName( ) + "<br/>");
            }
            out.print("Name : " + cookie.getName( ) + ",  ");
            out.print("Value: " + cookie.getValue( )+" <br/>");
         }
      } else {
         out.println("<h2>No cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

Sunucu uygulamasının üzerinde derleyin DeleteCookiesve web.xml dosyasında uygun girişi oluşturun. Şimdi http: // localhost: 8080 / DeleteCookies çalıştırıldığında aşağıdaki sonuç görüntülenir -

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Şimdi http: // localhost: 8080 / ReadCookies'i çalıştırmayı deneyin ve aşağıdaki gibi yalnızca bir çerez gösterecektir -

Found Cookies Name and Value

Name : last_name, Value: Player

Tanımlama bilgilerinizi Internet Explorer'da manuel olarak silebilirsiniz. Araçlar menüsünden başlayın ve İnternet Seçenekleri'ni seçin. Tüm tanımlama bilgilerini silmek için Tanımlama Bilgilerini Sil'e basın.