www.fatihkabakci.com

Personal Website and Computer Science TUR EN

SERVLET COOKIE(CEREZLER)

Last update: 4/24/2015 10:33:00 PM

Yazan: Fatih KABAKCI

Servlet, kullanıcı oturum takibini sağlamak adına çerezleri(cookie) desteklemektedir. Bir çerez(cookie), sunucunun istemciyi hatırlaması için istemci üzerinde sakladığı, yine istemci hakkındaki bilgidir. Cookie' ler hakkında daha fazla bilgi için Çerez Kavramı(Cookie) adlı yazıya bakın.

Cookie' lerin Servlet uygulamalarında nasıl kullanıldığını anlamak için aşağıdaki örneği inceleyelim.

Bu örnekte web uygulamalarında sıklıkla kullanılan basit bir üye giriş işlemine bakalım. Bir kullanıcı aşağıda sergilenen login.html adlı statik bir web sayfasına giriş yapar. Burada gerekli kullanıcı adı ve şifre bilgilerini girdikten sonra Login butonuna basar. Bu form sayfasının tetiklenmesine, LoginServlet uygulamasının çalışmasına neden olur. LoginServlet kullanıcı adı ve şifre bilgilerini alarak temsili olarak kontrol eder. Şayet girilen bilgi doğru ise, yeni bir cookie yaratır ve bu bilgiyi istemciye gönderir. Ardından GoServlet uygulamasını çalıştırır ve kullanıcının login işlemi başarıyla tamamlanır.

login.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<form action="LoginServlet" method="post">
<h1>Login</h1>
UserName: <input type="text" name="userName">
Password: <input type="password" name="password">
<input type="submit" value="Login" name="btn_submit">
</form>
</body>
</html>

LoginServlet.java

package com.fatihkabakci;

import java.io.IOException;

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 LoginServlet
 * 
 * @author www.fatihkabakci.com
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
   private static final long  serialVersionUID = 1L;

   public static final String USER_NAME        = "userName";

   public boolean verifyUser(String userName, String password) {
      // query check from db
      return true;
   }

   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String userName = request.getParameter("userName");
      String password = request.getParameter("password");

      if (verifyUser(userName, password)) {
         Cookie userCookie = new Cookie(USER_NAME, userName);
         userCookie.setMaxAge(5);
         response.addCookie(userCookie);
         response.sendRedirect("http://localhost:8080/JServlet/GoServlet");
      }
      else {
         response.sendRedirect("http://localhost:8080/JServlet/login.html");
      }
   }

   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      doGet(request, response);
   }
}

LoginServlet sınıfı, kullanıcıyı denetleyen, kullanıcı kaydı açan ve kullanıcıyı yetki vermekle sorumlu bir Servlet uygulamasıdır. Bunu istemci makinesinde kullanıcı adını saklayan bir cookie ile yapar.

GoServlet.java

package com.fatihkabakci;

import java.io.IOException;
import java.io.PrintWriter;

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 GoServlet
 * 
 * @author www.fatihkabakci.com
 */
@WebServlet("/GoServlet")
public class GoServlet extends HttpServlet {
   private static final long  serialVersionUID = 1L;

   public static final String USER_NAME        = "userName";

   /**
    * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
    */
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      Cookie[] cookies = request.getCookies();
      if (cookies != null) {
         for (Cookie cookie : cookies) {
            if (USER_NAME.equals(cookie.getName())) {
               out.println("<b>Welcome " + cookie.getValue() + "</b>");
            }
         }
      }
      else {
         response.sendRedirect("http://localhost:8080/JServlet/login.html");
      }
   }
}

GoServlet sınıfı, gelen istekteki tüm çerezleri okur. Mevcut çerezler içerisinden userName adlı cookie' yi kontrol eder. Şayet böyle bir cookie bulursa kullanıcıya geçiş verir. Şayet kullanıcı istemci uygulamasında cookie' leri kapatırsa yukarıdaki program çalışmayacaktır. Bunu aşmak için HttpSession arabirimi kullanılır. Bunun için Servlet Session Kavramı adlı yazıya bakın. Program çalıştırılırken aşağıdaki akış HTTP üzerinde sergilenir. Uygulama verileri Chrome tarayıcısı üzerinde F12 tuşlanarak takip edilebilir.


Kullanıcı giriş panelinde gerekli bilgileri tuşlar.


Kullanıcının HTTP isteğine karşılık sunucu HTTP cevabında Set-cookie header' ı görülür.


Kullanıcı daha sonra GoServlet için HTTP istek başlığında Cookie header' ını gönderdiği görülür.


Kullanıcı GoServlet HTTP 200 OK ile başarıyla giriş yapar.

There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.