Coding Planet

졜근 λ³Έ μƒν’ˆ κ΅¬ν˜„ν•˜κΈ° : urlμ—μ„œ product_idκ°€μ Έμ™€μ„œ 쿠킀에 μ €μž₯ν•˜κΈ° λ³Έλ¬Έ

πŸ“šν”„λ‘œμ νŠΈ/πŸ’³μ‡Όν•‘λͺ° ν”„λ‘œμ νŠΈ

졜근 λ³Έ μƒν’ˆ κ΅¬ν˜„ν•˜κΈ° : urlμ—μ„œ product_idκ°€μ Έμ™€μ„œ 쿠킀에 μ €μž₯ν•˜κΈ°

jhj.sharon 2023. 6. 15. 21:30
λ°˜μ‘ν˜•

 

 μ΅œκ·Ό μƒν’ˆμ„ μ €μž₯ν•˜λŠ”λ°λŠ” 크게 두 가지 방법이 μžˆλ‹€. μ„œλ²„μ— μ €μž₯ν•˜λŠ” 방법과 ν΄λΌμ΄μ–ΈνŠΈ, 즉 크둬 λ“± μ‚¬μš©μž ν™˜κ²½μ— μ €μž₯ν•˜λŠ” 방법이닀.

 μ„œλ²„에 μ €μž₯ν•˜λŠ” 방법은 두 가지 μ˜λ―Έμ—μ„œ κ·Έ ν•œκ³„κ°€ λͺ…ν™•ν•˜λ‹€.  첫째, μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€λ₯Ό ν΄λ¦­ν•˜λŠ” 것을 뢄석할 λ§Œν•œ λ§ˆμΌ€νŒ…μ  κ°€μΉ˜κ°€ 떨어진닀. λ¬Όλ‘  λ„“κ²Œ 보면 μ‚¬μš©μžκ°€ ν₯λ―Έ μžˆλŠ” μƒν’ˆμ„ ν΄λ¦­ν•œλ‹€λŠ” μ μ—μ„œ μ˜λ―Έκ°€ μžˆκ² μ§€λ§Œ '관심 μƒν’ˆ λͺ©λ‘'μ΄λΌλŠ” 더 λͺ…ν™•ν•œ λ§ˆμΌ€νŒ…μ  κ°€μΉ˜κ°€ μžˆλŠ” κΈ°λŠ₯λ³΄λ‹€λŠ” κ·Έ 효용이 떨어진닀. λ‘˜μ§Έ, μ‡Όν•‘λͺ°μ˜ λͺ¨λ“  νšŒμ›μ΄ λ“€μ–΄κ°„ λͺ¨λ“  νŽ˜μ΄μ§€μ˜ μƒν’ˆμ„ μ„œλ²„μ— μ €μž₯ν•˜κΈ°μ—λŠ” κ·Έ μš©λŸ‰μ΄ λ„ˆλ¬΄ μ»€μ„œ μ„œλ²„λΉ„μš©μ΄ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ λŠ˜μ–΄λ‚œλ‹€.

 μ’…ν•©μ μœΌλ‘œ λ§ν•˜μžλ©΄ λ§ˆμΌ€νŒ…μ  효용이 ν˜„μ €νžˆ 적은 '졜근 μƒν’ˆ μ €μž₯ν•˜κΈ°'λ₯Ό κ·Έ λ§Žμ€ μ„œλ²„λΉ„μš©μ„ λ“€μ—¬κ°€λ©΄μ„œ μ„œλ²„μ— μ €μž₯ν•  ν•„μš”κ°€ μ—†λ‹€λŠ” 것이닀.  λ”°λΌμ„œ  'μΏ ν‚€'λ₯Ό μ΄μš©ν•˜μ—¬ 졜근 λ³Έ μƒν’ˆμ„ κ΅¬ν˜„ν•˜λ„λ‘ ν•œλ‹€.

 

 

 

1. μΏ ν‚€μ˜ μž‘λ™μ›λ¦¬ πŸͺ

μΏ ν‚€λ₯Ό λ“±λ‘ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ€ 크게 두 가지 λ‹¨κ³„λ‘œ 이루어진닀. 첫 번째 λ‹¨κ³„λŠ” μΏ ν‚€λ₯Ό μƒμ„±ν•˜κ³  μ„€μ •ν•˜λŠ” 것이고, 두 번째 λ‹¨κ³„λŠ” μΏ ν‚€λ₯Ό λΈŒλΌμš°μ €μ— μ €μž₯ν•˜λŠ” 것이닀. 

1. μΏ ν‚€ μƒμ„± λ° μ„€μ •:

  • JavaScriptλ₯Ό μ‚¬μš©ν•˜μ—¬ `document.cookie` 속성을 μ΄μš©ν•˜μ—¬ μΏ ν‚€ 값을 μ„€μ •ν•œλ‹€. `document.cookie`은 ν˜„μž¬ νŽ˜μ΄μ§€μ˜ 쿠킀에 μ ‘κ·Όν•˜κ³  μˆ˜μ •ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 속성이닀.
  •  μΏ ν‚€μ˜ 이름, κ°’, 만료 λ‚ μ§œ, 경둜, 도메인 및 λ³΄μ•ˆ μ„€μ • 등을 μ„€μ •ν•œλ‹€.
  • 이 μ •λ³΄λŠ”  `name=value; expires=date; path=path; domain=domain; secure`와 같은 ν˜•μ‹μœΌλ‘œ μ„€μ •λœλ‹€.


2. μΏ ν‚€ μ €μž₯:

  • μΏ ν‚€κ°€ μƒμ„±λ˜κ³  μ„€μ •λ˜λ©΄, λΈŒλΌμš°μ €λŠ” ν•΄λ‹Ή μΏ ν‚€λ₯Ό μ €μž₯ν•œλ‹€. μ €μž₯된 μΏ ν‚€λŠ” λΈŒλΌμš°μ €κ°€ μ’…λ£Œλ˜μ–΄λ„ μœ μ§€λ˜λ©°, μ„€μ •λœ 만료 λ‚ μ§œ μ΄ν›„μ—λŠ” μ‚­μ œλœλ‹€.
  •  μΏ ν‚€λŠ” λΈŒλΌμš°μ €μ˜ "μΏ ν‚€ μ €μž₯μ†Œ"에 μ €μž₯λœλ‹€. ν¬λ‘¬μ—μ„œλŠ” 이 μ €μž₯μ†Œλ₯Ό κ΄€λ¦¬ν•˜λŠ” "μΏ ν‚€ κ΄€λ¦¬μž"λ₯Ό μ œκ³΅ν•˜μ—¬ μ‚¬μš©μžκ°€ μΏ ν‚€λ₯Ό ν™•μΈν•˜κ³  μ‚­μ œν•  수 μžˆλ„λ‘ ν•œλ‹€. μΏ ν‚€ κ΄€λ¦¬μžλŠ” μ£Όμ†Œ 창의 "μ„€μ •" λ©”λ‰΄μ—μ„œ "μΏ ν‚€ 및 기타 μ‚¬μ΄νŠΈ 데이터" μ˜΅μ…˜μ„ μ„ νƒν•˜μ—¬ μ ‘κ·Όν•  수 μžˆλ‹€.
  • λ˜ν•œ 개발자 λ„κ΅¬μ˜ Applicationμ—μ„œ λ‹€μŒκ³Ό 같이 확인할 수 μžˆλ‹€.

 

 

 

 

2. μΏ ν‚€ 등둝 μ½”λ“œπŸͺ

  • μƒν’ˆ λͺ©λ‘ νŽ˜μ΄μ§€μ—μ„œ μƒμ„ΈνŽ˜μ΄μ§€λ‘œ 이동할 λ•Œ 쿼리슀트링으둜 product_Id값이 λ“€μ–΄μ˜€λ„λ‘ κ΅¬ν˜„λ˜μ–΄μžˆλ‹€.
  • (http://localhost:8080/stroke/product/productDetail?product_id=72)
  • μƒν’ˆ μƒμ„ΈνŽ˜μ΄μ§€μ—μ„œλŠ” url의  product_Id 값을 받아와 쿠킀에 λˆ„μ  μ €μž₯ν•œλ‹€.
  • 이 λ•Œ product_Idλ₯Ό μ€‘λ³΅λ˜μ§€ μ•ŠμœΌλ©° 24μ‹œκ°„ λ™μ•ˆ μ €μž₯되고 μžλ™μœΌλ‘œ μ‚­μ œλœλ‹€. μž‘λ™μˆœμ„œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

  • 1) νŽ˜μ΄μ§€κ°€ λ‘œλ“œλ˜λ©΄ onPageLoad()ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€ window.addEventListener('load', onPageLoad);
  • onPageLoad()μ—μ„œλŠ” μΏ ν‚€ 등둝에 ν•„μš”ν•œ μΏ ν‚€μ˜ keyκ°’, value κ°’, λ§Œλ£ŒμΌμ„ μΏ ν‚€ 등둝 ν•¨μˆ˜setCookie(cookieName, value, expirationDate)에 μ „λ‹¬ν•œλ‹€.
//Cookies----------------------------------------------------
// νŽ˜μ΄μ§€ λ‘œλ“œ ν›„ μ‹€ν–‰ν•  ν•¨μˆ˜
function onPageLoad() {
  var url = window.location.href;
  var productId = getProductIDFromURL(url);
  console.log("productId::" + productId);

  if (productId) {
    var recentProducts = getCookie('recent_products');
    var recentProductIds = recentProducts ? recentProducts.split('/') : [];
   
    if (!recentProductIds.includes(productId)) {
      recentProductIds.push(productId);
    }

    // μ΅œλŒ€ 10κ°œκΉŒμ§€ μœ μ§€
    if (recentProductIds.length > 10) {
      recentProductIds.shift();
    }

    recentProducts = recentProductIds.join('/');

    // 24μ‹œκ°„ ν›„μ˜ μ‹œκ°„ 객체 생성
    var expirationDate = new Date();
    expirationDate.setTime(expirationDate.getTime() + (24 * 60 * 60 * 1000));
    console.log("expirationDate::" + expirationDate);

    // 쿠킀에 recent_products μ €μž₯ (μœ νš¨κΈ°κ°„: 24μ‹œκ°„)
    setCookie('recent_products', recentProducts, expirationDate);
  }
}

// νŽ˜μ΄μ§€ λ‘œλ“œ 이벀트 λ¦¬μŠ€λ„ˆ 등둝
window.addEventListener('load', onPageLoad);


function setCookie(cookieName, value, expirationDate) {
  var cookieValue = escape(value) + ((expirationDate == null) ? '' : '; expires=' + expirationDate.toUTCString());
  document.cookie = cookieName + '=' + cookieValue;
}

function getCookie(cookieName) {
  var name = cookieName + '=';
  var decodedCookie = decodeURIComponent(document.cookie);
  var cookieArray = decodedCookie.split(';');

  for (var i = 0; i < cookieArray.length; i++) {
    var cookie = cookieArray[i];
    while (cookie.charAt(0) == ' ') {
      cookie = cookie.substring(1);
    }
    if (cookie.indexOf(name) == 0) {
      return cookie.substring(name.length, cookie.length);
    }
  }
  return '';
}

//urlμ—μ„œ productIdλ₯Ό κ°€μ Έμ˜€λŠ” ν•¨μˆ˜
function getProductIDFromURL(url) {
  var regex = /[?&]product_id=(\d+)/;
  var match = regex.exec(url);
  if (match && match[1]) {
    return match[1];
  }
  return null;
}

//Cookies End----------------------------------------------------
λ°˜μ‘ν˜•
Comments