์๋ธ๋ฆฟ์ ์ธ์
์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก HttpSession
์ ์ง์ํ๋ค.
์๋ธ๋ฆฟ์ ํตํด HttpSession
์ ์์ฑํ๋ฉด JSESSIONID
๋ผ๋ ์ด๋ฆ ๋ฐ ์ถ์ ๋ถ๊ฐ๋ฅํ ๋๋ค ๊ฐ์ ๊ฐ์ง๋ ์ฟ ํค๋ฅผ ์์ฑํ๋ค.
Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05
@PostMapping("/login")
public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult result, HttpServletRequest request) {
/**
* ๋ก๊ทธ์ธ ์คํจ ์ฒ๋ฆฌ
*/
//๋ก๊ทธ์ธ ์ฑ๊ณต ์ฒ๋ฆฌ
HttpSession session = request.getSession();
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
return "redirect:/";
}
๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด request.getSession()
์ ํตํด ์ธ์
์ ์์ฑํ๊ณ ํด๋น ์ธ์
์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ค.
request.getSession()
๋ฉ์๋๋ ๋ ๊ฐ์ง ์ต์
์ ์ ๊ณตํ๋ค. (default = true)
reuquest.getSession(true)
- ์ธ์ ์ด ์์ผ๋ฉด ๊ธฐ์กด ์ธ์ ์ ๋ฐํํ๋ค.
- ์ธ์ ์ด ์์ผ๋ฉด ์๋ก์ด ์ธ์ ์ ์์ฑํด์ ๋ฐํํ๋ค.
request.getSession(false)
- ์ธ์ ์ด ์์ผ๋ฉด ๊ธฐ์กด ์ธ์ ์ ๋ฐํํ๋ค.
- ์ธ์ ์ด ์์ผ๋ฉด ์๋ก์ด ์ธ์ ์ ์์ฑํ์ง ์๊ณ null์ ๋ฐํํ๋ค.
@PostMapping("/logout")
public String logoutV3(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
return "redirect:/";
}
์ธ์
์ด ์กด์ฌํ๋ฉด session.invalidate()
๋ฉ์๋๋ก ์ธ์
์ ์ ๊ฑฐํ๋ค.
์คํ๋ง์ ์ธ์
์ ๋ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก @SessionAttribte
์ ์ง์ํ๋ค.
@GetMapping("/")
public String homeLoginV3(HttpServletRequest request, Model model) {
//์ธ์
์ด ์์ผ๋ฉด home
HttpSession session = request.getSession(false);
if (session == null) {
return "home";
}
Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);
//์ธ์
์ ํ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด home
if (loginMember == null) {
return "home";
}
//์ธ์
์ด ์ ์ง๋๋ฉด ๋ก๊ทธ์ธ์ผ๋ก ์ด๋
model.addAttribute("member", loginMember);
return "loginHome";
}
HTTP ์์ฒญ์ ์ธ์
์ ์กฐํํด์
์ธ์
์ด๋ ์ธ์
์ ํ์ ๋ฐ์ดํฐ๊ฐ null์ด๋ฉด ํ ํ๋ฉด์ผ๋ก ์ด๋์ํค๋ ๋ก์ง์ด๋ค.
@GetMapping("/")
public String homeLoginV3Spring(
@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember,
Model model) {
//์ธ์
์ ํ์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด home
if (loginMember == null) {
return "home";
}
//์ธ์
์ด ์ ์ง๋๋ฉด ๋ก๊ทธ์ธ์ผ๋ก ์ด๋
model.addAttribute("member", loginMember);
return "loginHome";
}
@SessionAttribute
์ ํตํด์ ์ธ์
์ ๋ณด๊ด๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค.
์ธ์
์ด ์๋ค๋ฉด loginMember
์ ๋ฐ์ธ๋ฉ๋๋ ๊ฐ์ฒด๋ ์์ผ๋ฏ๋ก ์ด์ ์ ๋ฒ๊ฑฐ๋ก์ด ๋ก์ง์ ๋จ์ถํ ์ ์๋ค.
๋ก๊ทธ์ธ์ ์ฒ์ ์๋ํ๋ฉด URL์ jsessionid๊ฐ ๋ ธ์ถ๋๋๋ฐ ๊ทธ ์ด์ ๋
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟ ํค๋ฅผ ์ง์ํ์ง ์์ผ๋ฉด ์ฟ ํค ๋์ URL์ ํตํด ์ธ์ ์ ์ ์งํ ์ ์๋๋ก ์ง์ํ๋ ์ ์ฑ ๋๋ฌธ์ด๋ค.
ex) http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872URL ์ ๋ฌ ๋ฐฉ์์ ๋๊ณ ํญ์ ์ฟ ํค๋ฅผ ํตํด์๋ง ์ธ์ ์ ์ ์งํ๊ณ ์ถ์ผ๋ฉด application.properties์ ๋ค์ ์ต์ ์ ์ถ๊ฐํ๋ค. server.servlet.session.tracking-modes=cookie
์ธ์
์ ์ข
๋ฃ ์์
์ ์ค์ ํ๋ ์ผ์ ์ค์ํ๋ค.
๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ๋ก๊ทธ์์ ๋์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข
๋ฃํ๊ณ , ์๋ฒ๋ ์ด๋ฅผ ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ธ์
์ ์ข
๋ฃ ์์ ์ด ๋๋ฌด ๊ธธ๋ฉด ์ฌ๋ฌ๊ธฐ์ง ๋ถ์์ฉ์ ์ด๋ํ๋ค.
๊ฐ์ฅ ํฉ๋ฆฌ์ ์ธ ๋ฐฉ์์
์ฌ์ฉ์๊ฐ ๋ง์ง๋ง์ผ๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ธ ์๊ฐ์ผ๋ก๋ถํฐ ์ ์ ํ ์๊ฐ์ ๋๊ณ ์ธ์
์ ๋ง๋ฃ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
HttpSession
์ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
session.setMaxInactiveInterval(1800);
application.properties
์ ์ต์
์ ์ค์ ํ๋ฉด WAS๋ ์ธ์
๋ง์ง๋ง ์ ๊ทผ ์๊ฐ์ผ๋ก๋ถํฐ ์ค์ ์๊ฐ ๊ฒฝ๊ณผ ํ ์ธ์
์ ์ ๊ฑฐํ๋ค.