Skip to content

Latest commit

ย 

History

History
135 lines (99 loc) ยท 4.55 KB

session_02.md

File metadata and controls

135 lines (99 loc) ยท 4.55 KB

๋กœ๊ทธ์ธ - ์„ธ์…˜(Session)

์„œ๋ธ”๋ฆฟ์€ ์„ธ์…˜์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก 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() ๋ฉ”์„œ๋“œ๋กœ ์„ธ์…˜์„ ์ œ๊ฑฐํ•œ๋‹ค.

@SessionAttribute

์Šคํ”„๋ง์€ ์„ธ์…˜์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก @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=F59911518B921DF62D09F0DF8F83F872

URL ์ „๋‹ฌ ๋ฐฉ์‹์„ ๋„๊ณ  ํ•ญ์ƒ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์„ธ์…˜์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด application.properties์— ๋‹ค์Œ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค. server.servlet.session.tracking-modes=cookie


์„ธ์…˜ ํƒ€์ž„์•„์›ƒ

์„ธ์…˜์˜ ์ข…๋ฃŒ ์‹œ์ ์„ ์„ค์ •ํ•˜๋Š” ์ผ์€ ์ค‘์š”ํ•˜๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์•„์›ƒ ๋Œ€์‹  ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•˜๊ณ , ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜์˜ ์ข…๋ฃŒ ์‹œ์ ์ด ๋„ˆ๋ฌด ๊ธธ๋ฉด ์—ฌ๋Ÿฌ๊ธฐ์ง€ ๋ถ€์ž‘์šฉ์„ ์ดˆ๋ž˜ํ•œ๋‹ค.

๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ์•ˆ์€
์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ธ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ ์ ์ ˆํ•œ ์‹œ๊ฐ„์„ ๋‘๊ณ  ์„ธ์…˜์„ ๋งŒ๋ฃŒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
HttpSession์€ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

session.setMaxInactiveInterval(1800);

application.properties์— ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด WAS๋Š” ์„ธ์…˜ ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ ์„ค์ • ์‹œ๊ฐ„ ๊ฒฝ๊ณผ ํ›„ ์„ธ์…˜์„ ์ œ๊ฑฐํ•œ๋‹ค.


Reference