Youtube Linki : **https://www.youtube.com/watch?v=kSmo9ZPYMSE**

Notion Linki : https://dawn-squash-710.notion.site/dev-5-Cookies-0a317ff53f564ec993ded74d121b1625

Uygulama Görüntüleri

Untitled

Untitled

Giriş Sayfası

Bir login sayfası tasarlayalım. Bu işi login.jsp dosyasında yapalım :

login.jsp

Untitled

Burada bir html iskelet oluşturup charset’i UTF-8 olarak ayarladıktan sonra body bölümüne bir form koyduk. Form metodu POST. Form action’u ile cookiecontrol servlet’ine geçiş yapacağız. Formun 4 parçadan oluştuğunu söyleyebiliriz.

  1. username için bir input ve input kutucuğu için label. name=”uname” kısmı bizim için önemli. Ayrıca burası input alınması zorunlu alan(required)
  2. password için bir input ve input kutucuğu için label. Yine name önemli ve required kısmı var.
  3. Form verilerini işlemek ve göndermek için submit butonu
  4. Daha sonrasında giriş için username ve password girmeye gerek kalmaması için “Beni Hatırla” bölümü. Burası tıklanmışsa arka planda cookie oluşturulacaktır. Yine buradakı name bilgisi önemli.

Bu form içerisine girilen username ve password bilgileri doğruymuş gibi alınacak ve kontrolü yapılmayacaktır. Yani ne yazılırsa yazılsın giriş yapılabilir.

Bu sayfada bir kısım daha bulunmakta fakat önce submit butonuna tıklandığında gidilen servlet’i inceleyelim.

Cookie-Çerez Oluşturma

Formdan gelen bilgiye göre cookie oluşturmayı CookieControl.java dosyası içerisinde yapacağız. Burası bir çeşit kontrolcü diyebiliriz.

CookieControl.java

Untitled

Burada öncelikle gerekli importlar yapıldı. Ardından önemli olan WebServlet tanımlaması yapıldı. Bu tanımı zaten form action bölümünde kullanmıştık. Ardından sınıfımız ve yapılandırıcımız , onun altında ise doGet metodu bulunmakta. Bu kısımlarda herhangi bir şey yapılmıyor. Burası bildiğimiz kısım.

CookieControl.java

Untitled

Şimdi doPost metoduna bakabiliriz. Formdan post metodu seçildiği için burası çalışacaktır.

İçerik

Şimdi welcomePages.jsp içerik sayfasını görelim.

welcomePages.jsp

Untitled

html iskeleti oluşturuldu ve UTF-8 ayarlandı.

welcomePages.jsp

Untitled

Şimdi login.jsp kısmında atladığımız bir noktaya tekrar dönelim .

Otomatik giriş

Untitled

login sayfasında alt kısımda bir kontrol daha yapmaktayız. Bu da cookie kontrolü. Sayfaya ilk geldiğimiz anda zaten daha öncesinden bir çerez oluşturmuşsak login bölümünü atlayıp içeriği görüntüleyebiliyoruz.

Bunun için öncelikle cookie bilgilerini bir listeye alıyoruz. Eğer liste null değilse ve boyutu 1’den büyükse ilgili içeriğe direk olarak ilerliyoruz.

Kodlar

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  	
    <form action="cookiecontrol" method="post">
        <label for="uname"><b>Username</b></label>
        <input type="text" placeholder="Enter Username" name="uname" required>

        <label for="psw"><b>Password</b></label>
        <input type="password" placeholder="Enter Password" name="psw" required>
        
        <button type="submit">Login</button>
        <label>
          <input type="checkbox" checked="checked" name="remember"> Remember me
        </label>
      </form>
      

</body>
</html>

<%	
//eğer cookie zaten kaydedildiyse direk olarak giriş yap
	Cookie[] cookies = null;    		
	cookies = request.getCookies();
	
	if (cookies != null ){
		if(cookies.length > 1){
			RequestDispatcher requestDispatcher = request.getRequestDispatcher("welcomePages.jsp");
			requestDispatcher.forward(request, response); 
		}
	} 
	

%>

CookieControl.java

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Servlet implementation class CookieControl
 */
@WebServlet("/cookiecontrol")
public class CookieControl extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public CookieControl() {
        super();
        // TODO Auto-generated constructor stub
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		RequestDispatcher requestDispatcher = request.getRequestDispatcher("welcomePages.jsp");
		
		if(request.getParameter("remember") == null ){
			// işaretli olmadığı durumda direk sayfaya gir.
	        requestDispatcher.forward(request, response); 
		}
		else{ // request.getParameter("remember").equals("on") durumu , yani kutucuk işaretli

			// beni hatırla kutucuğu işaretlendi 
				// yeni cookie oluşturulacak 
				/*
				Cookie cUsername = new Cookie("username", request.getParameter("uname"));
			    Cookie cPassword = new Cookie("password", request.getParameter("psw"));
			    
			    // cookie ayarları
			    cUsername.setMaxAge(60*60*10);  // Cookie yaşam süresi saniye cinsinden ifade edilir
			    cPassword.setMaxAge(60*60*10); 	// . . .  
			    
			    // cookie eklendi
			    response.addCookie(cUsername);
			    response.addCookie(cPassword); 
			    */
				//								//      key=username         ,     value=password   
				Cookie userCookie = new Cookie(request.getParameter("uname") , request.getParameter("psw"));
				userCookie.setMaxAge(60*60*10);
				response.addCookie(userCookie);
			    
						
				// sayfa değişimi
			    requestDispatcher.forward(request, response);	// welcomePages sayfasına gidilir.
			   	    
		}
	}
}

welcomePages.jsp

<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Hoşgeldin</h1>
	<p><% 
		
		Cookie[] cookies = null;
		cookies = request.getCookies();
		
		// Şimdi cookie oluşturulmuşmu kontrolü yapacağız.
		if( cookies != null ){ 	// eğer cookie null değilse , 
			// ve form'a veri girilip cookie oluşturulmuşsa 
			if(cookies.length > 1){
			
				// Önce isim ve şifre bilgisini alalım. 
				String name = cookies[1].getName();
				String password = cookies[1].getValue();
				// Şimdi bu bilgileri sayfaya yansıtalım
				out.println("<p>Merhaba <strong>" +  name + "</strong> ---- çerez bilgisi kaydedildi </p>"); 
				out.println("username = " + name + "\\npassword = " + password );
				
				/*	Eğer çoklu cookie olsaydı bu döngü kullanılabilirdi
				
					for (Cookie c : cookies) {
			   			out.print("[username] : " + c.getName()  + "  ===== " );
			   			out.print("[password] : " + c.getValue() + "<br/>");
					}
				*/
			}
			else{
				// burada sadece formdan gelen değer yazdırılır.
				out.println("<p>Merhaba <i>" + request.getParameter("uname") + "</i> ---- [çerez kaydedilmedi ] </p>");
			}
		}else{
			// hata durumu 
			out.println("çerez bulunamadı");		
		}	
		%></p>
</body>
</html>