π[Web] μΏ ν€μ μΈμ μ λν΄μβ¦
π μΏ ν€μ μΈμ μ λν΄μβ¦
μΏ ν€
μ μΈμ
μ μΉμμ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ μ¬μ©λλ λꡬλ€μ΄λ€.
μ£Όλ‘, κ°μΈνλ λ°μ΄ν°
λ₯Ό λ€λ£° λ μ¬μ©νκ³ , βκ°μΈνλ λ°μ΄ν°βλ, βλΈλΌμ°μ λ³λ‘ κ΅¬λ³ κ°λ₯ν λ°μ΄ν°β μ΄λ€. μμλ‘λ, βλ‘κ·ΈμΈβ μ λκ° μλ€.
1. μΏ ν€
μΏ ν€λ λΈλΌμ°μ
μ μ μ₯λλ λ°μ΄ν°λ₯Ό λ§νλ€.
μΉμμ κ°μ₯ μ€μν κ²μ€ νλκ° λ°λ‘ μμ²
κ³Όμλ΅
μ΄λ€.
μΏ ν€μμ μμ² μ¦, HttpServletRequest
μ ν΄λΉνλ κ²μ getCookie
λ‘ μΏ ν€ μ‘°ν κΈ°λ₯μ΄λ€.
μλ΅ μ¦, HttpServletResponse
μ ν΄λΉνλ κ²μ setCookie
λ‘ μΏ ν€ λ±λ‘ κΈ°λ₯μ΄λ€.
1-1. μΏ ν€ μ μ₯
λΈλΌμ°μ μμ μΏ ν€λ₯Ό μ μ₯ν λλ Set-Cookie
ν¨μλ₯Ό μ΄μ©νμ¬ ν€=κ°
νμμΌλ‘ μ μ₯νλ€.
1-2. μΏ ν€ νΈμΆ
λΈλΌμ°μ κ° μλ²μ βμμ²βμ ν΅ν΄ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ μ μλ€.
1-3. μΏ ν€ μ¬μ© μμ
java μ½λλ‘ μΏ ν€λ₯Ό μ¬μ©ν΄λ³΄μ.
// μΏ ν€ λ±λ‘
@RestController
public class CookieExamController {
@GetMapping("/ex01")
public void exam(HttpServletResponse rs) {
Cookie cookie = new Cookie("key1", "value1");
cookie.setMaxAge(60 * 60 * 24 * 7); // μΏ ν€ λ§λ£ μκ° μ€μ : 1μ£ΌμΌ λ€ μΏ ν€ λ§λ£
rs.addCookie(cookie); // μλ΅ ν€λ: Set-Cookie : key1=value1
}
}
μ μ½λλ₯Ό μ
λ ₯νκ³ , μλ²μ ν¨κ» μ€νν΄λ³΄μ.
νλ©΄μλ μ무 κ²λ μΆλ ₯λμ§ μμ§λ§ f12
λ₯Ό λλ¬ κ°λ°μλꡬ
λ‘ λ€μ΄κ°μ μλ‘κ³ μΉ¨(f5
)λ₯Ό ν΄λ³΄λ©΄, ex01μ΄λΌλ μ΄λ¦μ μ£Όμκ° λμμμκ±΄λ° κ·Έκ±Έ ν΄λ¦ν΄μ μ΄μ΄λ³΄λ©΄ μλμ κ°μ΄ λμ¨λ€.
> Response Header
Connection: keep-alive
Content-Length: 0
Date: Tue, 15 Nov 2022 10:31:37 GMT
Keep-Alive: timeout=20
Set-Cookie: key1=value1
μ¬κΈ°μ λ³Ό μ μλ―μ΄, μλ΅ ν€λ
μμ Set-Cookie: key1=value1
νμμΌλ‘ μΏ ν€λ₯Ό μ μ₯ν κ²μ μ μ μλ€.
λ€μμΌλ‘ μΏ ν€λ₯Ό βμ‘°νβν΄λ³΄μ.
// μΏ ν€ μ‘°ν
@GetMapping("/ex02")
public void exam2(HttpServletRequest rq) {
Cookie[] cookies = rq.getCookies();
for(Cookie cookie:cookies) {
System.out.printf("name=%s, value=%s\n", cookie.getName(), cookie.getValue());
}
}
μ μ½λλ₯Ό μΆκ°ν΄λ³΄λ©΄, μ½μ μ°½μ λ΄κ° λ±λ‘ν μΏ ν€μ μ 보λ₯Ό μ‘°νν μ μλ€.
λ§μ°¬κ°μ§λ‘ f12
λ₯Ό λλ¬ μΏ ν€ μ 보λ₯Ό μ°Ύμ보면
> Request Header
key1=value1; Idea-9b46b357=2a35f0b5-d223-466f-b572-fb3bf1131e42; _xsrf=2|8a3111ba|28a2b91ab6eab1bf2c74d869a4c98e20|1668274061; username-localhost-8888="2|1:0|10:1668479275|23:username-localhost-8888|44:ZjBjMzk2YjhkYjAwNDhkYTg4NmVjMTkxNzEzMzhiYmY=|704f56e52b3773386317885a767ea947455988928efa4e5641174da5af0de01a"
μμ κ°μ΄ μμ² ν€λ
μ μΏ ν€μ λν μ 보λ₯Ό μ‘°νν μ μλ€.
μμ λ°©μμ΄ λ무 κΈΈμ΄ λ²κ±°λ‘μ°λ©΄
@GetMapping("/ex03")
public void exam3(@CookieValue("key1") String name) {
System.out.println(name);
}
μμ κ°μ΄ μμ±ν μ μλ€.
2. μΈμ
μΈμ
μ μ¬μ©μκ° λΈλΌμ°μ λ₯Ό λ«μ μλ²μμ μ°κ²°μ λλ΄λ μμ κΉμ§λ₯Ό μΌμ»«λλ€.
μΏ ν€κ° κ°μΈνλ λ°μ΄ν°λ₯Ό λΈλΌμ°μ
μ μ μ₯νλ€λ©΄, μΈμ
μ μλ²
μ μ μ₯νλ€.
μΏ ν€λ ν΄λΌμ΄μΈνΈ
μ»΄ν¨ν°μ λͺ¨λ λ°μ΄ν°λ₯Ό μ μ₯νλ€λ©΄, μΈμ
μ μλΉμ€κ° λμνκ³ μλ μλ²
μΈ‘μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ , μΈμ
μ ν€κ°
μ ν΄λΌμ΄μΈνΈμ λ¨κΈ΄λ€.
λΈλΌμ°μ λ νμν λλ§λ€ μ΄ ν€κ°μ μ΄μ©ν΄ μλ²μ μ μ₯λ λ°μ΄ν°λ₯Ό μ¬μ©νλ€.
κ²°κ΅ μΈμ
μ μΏ ν€μ 보μμ±μ 보μν΄μ£Όλ μνΈλ³΄μμ μΈ κ΄κ³λΌκ³ λ³Ό μ μλ€.
2-1. μΈμ κ° λ±λ‘
HttpSession
ν΄λμ€λ₯Ό μ¬μ©νλ€.
μ¬κΈ°μ, setAttribute("key", "value")
λ₯Ό ν΅ν΄ κ°μ λ±λ‘ν μ μλ€.
2-2. μΈμ κ° μ‘°ν
getAttribute("key")
λ₯Ό ν΅ν΄ λ±λ‘λ κ°μ μ‘°νν μ μλ€.
2-3. μΈμ μ¬μ© μμ
// μΈμ
λ±λ‘
@RestController
public class SessionExamController {
@GetMapping("/ex04")
public void ex04(HttpSession session) {
session.setAttribute("key2", "value2");
}
}
μμ μ½λλ₯Ό μ
λ ₯νκ³ μ€νν΄λ³΄κ³ , ν΄λΉ νμ΄μ§μμ f12
λ₯Ό λλ¬ νμΈν΄λ³΄μ.
μΈμ
μ΄ λ±λ‘λμμν
λ°, κ°λ°μλꡬμμλ 보μ΄μ§ μλλ€. μ΄μ μ λ±λ‘ν μΏ ν€(key1=value1)λ§ λμ¨λ€. μλνλ©΄, μΈμ
μ μλ²
μ μ μ₯λκΈ° λλ¬Έμ λΈλΌμ°μ μμλ νμΈν μ μλ€. λμ JESESSIONID
λΌλ κ°μ΄ μκ²Όμν
λ°, ν΄λΉ κ°μ λΈλΌμ°μ
λ§λ€ λ€λ₯΄λ€.
ctrl + shift + n
μ λμμ λλ¬ ν¬λ‘¬ μν¬λ¦Ώ λͺ¨λλ‘ λ€μ΄κ° κ°μ urlμ μ
λ ₯ν ν, κ°λ°μλκ΅¬λ‘ νμΈν΄λ³΄λ©΄ JSESSIONID
μ κ°μ΄ λ€λ₯΄κ² λμ€λ κ²μ λ³Ό μ μλ€.
λ€μμΌλ‘ κ°μ μ‘°νν΄λ³΄μ.
@GetMapping("/ex05")
public void ex05(HttpSession session) {
String value2 = (String)session.getAttribute("key2");
System.out.printf("key2=%s\n", value2);
}
μ μ½λλ₯Ό μ
λ ₯νκ³ μ€ννλ©΄, μ½μμ°½μ key2=value2
λΌκ³ μΆλ ₯λλ κ²μ νμΈν μ μλ€.
λκΈλ¨κΈ°κΈ°