[Spring] - Session Tracking

NoowaH·2021년 10월 6일
0
post-thumbnail

✅ Spring Bean Controller 의 Session Tracking 기술


  1. Cookie API
  2. HttpSession
  3. @SessionAttribute

Test용 Cookie & Session 객체 :

 <%
 	//test용 Cookie 데이터 생성해서 client에게 전송
 	Cookie c = new Cookie("id", "cookieData");
 	c.setMaxAge(60*60);
 	response.addCookie(c);
 	
 	//test용 Session 데이터 저장
 	session.setAttribute("id", "tester");
 	session.setAttribute("age", 100);
 %>

Controller :

package controller;

import ...
    
@Controller
@RequestMapping("sessiontracking")
public class Step03Controller {
	...
}


<a href="sessiontracking/cookietest">@CookieValue</a>
	@RequestMapping("/cookietest")
	public String m1(@CookieValue("id") String idValue) {
		System.out.println("m1() -- " + idValue);
        // 출력 결과 : "m1() -- " + cookieData"
	}

🔵 (@CookieValue("id") String idValue)

  • 쿠키에 "id"라는 키 값에 저장된 데이터를 String idValue 변수로 반환


2. HttpSession


<a href="sessiontracking/sessionTest1">HttpSession API 활용 </a>
	    @RequestMapping("/sessionTest1")
	    public String m2(HttpSession session) {
	       	session.getAttribute("id"));
	        session.getAttribute("age"));

	        session.setAttribute("newData", "서버에서 새로 저장한 데이터");
	        return "redirect:/step03Session.jsp";
	    }
	    @RequestMapping("/sessionDelete")
	    public String m3(HttpSession session) {
	    	System.out.println("m3()---");
	    	session.invalidate();
	    	session = null;
	    	
			return "redirect:/step03Session.jsp";
	    }

🔵 (HttpSession session)

  • Servlet 과 동일하게 HttpSession객체로 Session 데이터 활용 가능

🔵 Session 초기화

  • session.invalidate(); 로 Session 초기화 후 null 값 반환


3. @SessionAttribute


Spring Controller Session Tracking

@Controller
@RequestMapping("sessiontracking")
@SessionAttributes({"id", "age", "cust"})
public class Step03Controller {
 	...   
}

🔵 클래스 상위에 선언

🔵 @SessionAttributes({})

  • Session의 key 값들을 지정하는 배열

👀 Session Data 가져오기

	    @RequestMapping("/sessionTest2")
	    public String m4(@ModelAttribute("id") String id,
	    				 @ModelAttribute("age") int age) {
	    	
	    	return "redirect:/step03Session.jsp";
	    }

🔵 (@ModelAttribute("id") String id, @ModelAttribute("age") int age)

  • session에 있는 id와 age key를 가진 데이터를 가져온다

🚩 @ModelAttribute 은 request에다 넣는건 줄 알았는데...!?

  • @SessionAttribute 에 지정된 key 값이 존재하지 않을 때는 request.setAttribute("id", id) 와 비슷하게 실행되고 forward 방식일 때만 jsp에서 ${requestScope.id}으로 출력이 가능하다
  • 🤪❓ forward 방식이며 @SessionAttribute 에 지정된 key 값이면 ${requestScope.id} & ${sessionScope.id} 둘 다 사용 가능 (왜 requestScope도 사용이 가능한지 잘 모르겠다😭)

@SessionStatus


Session Data 초기화

	    @RequestMapping("/sessionDelete2")
	    public String m5(SessionStatus status) {
	    	System.out.println("m5()--- ");
	    	
	    	status.setComplete();

	    	return "redirect:/step03Session.jsp";
	    }

🔵SessionStatus API

  • setComplete() 메소드를 사용해서 Session 초기화



++ 👀 @Model API를 활용한 Query String Data 사용


@PathParam & DTO.class

	    @RequestMapping("sessionTest3DTO")
	    public String m6(Model model, 
                         @PathParam("id") String id, 
                         @PathParam("age") int age) {
            
	    	model.addAttribute("id", id);
            model.addAttribute("id", id);
	    	
	    	return "redirect:/step03Session.jsp";
	    }

🔵@PathParam 을 활용하요 각 데이터를 가져오거나 Query String과 일치되는 변수로 구성된 DTO 활용



🚩❕❕ HttpSession & SessionAttributes 의 작동 차이


  • 다른 API의 활용으로 둘다 Session에 데이터를 추가는 가능하지만 초기화 하는 방식은 따로 작동

  • HttpSession 의 초기화 방식인 invalidate()로는 @SessionAttributes 에서 지정된 key 값을 가진 Session Data는 삭제 불가

  • HttpSessiongetAtrribute()&setAttribute()@SessionAttribute 에서 지정된 key의 데이터 반환 및 추가는 가능

profile
조하운

0개의 댓글