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----------------------------------------------------
๋ฐ์ํ
'๐ํ๋ก์ ํธ > ๐ณ์ผํ๋ชฐ ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JSP, JSTL] forEach๋ฌธ์ผ๋ก ๋ง๋ ํ ์ด๋ธ ๋ณํฉํ๊ธฐ (varStatus="status"์์ฑ) (0) | 2023.06.20 |
---|---|
์ผํ๋ชฐ ์ํ ์นดํ ๊ณ ๋ฆฌ ๊ตฌํํ๊ธฐ - ์ฟผ๋ฆฌ ์คํธ๋ง (0) | 2023.06.13 |