관리 메뉴

샐님은 개발중

20. 세션/쿠키 본문

Spring Framework/인프런강의-자바 스프링 프레임워크

20. 세션/쿠키

샐님 2023. 5. 29. 20:00
728x90
반응형

1. 세션 과 쿠키

웹 서비스

   - 웹서비스는 HTTP 프로토콜을 기반이므로 HTTP 프로토콜은 클라이언트와 서버의 관계를 유지하지 않는다.

     서버의 부하를 줄이는 장점이 있으나, 클라이언트의 요청 시 매번 서버와 새로운 연결이 생성되기 때문에 로그인, 상태 유지, 장바구니 등의 기능 구현이 어렵다.

     이러한 conntectionless protocol의 불편함을 해결하기 위해 세션과 쿠키를 이용한다. 

세션과 쿠키는 클라이언트와 서버의 연결 상태를 유지해주므로 세션은 서버에서 연결 정보를 관리하는 반면 쿠키는 클라이언트에서 연결 정보를 관리하는 데 차이가 있다. 

 

 

2. HttpServletRequest 를 이용한 세션 사용

세션 객체 사용법


//1) HttpServletRequest 사용
	
	@RequestMapping(value = "/memLogin", method = RequestMethod.POST)
	public String memLogin(Member member, HttpServletRequest request) {
		Member mem = service.memberSearch(member);
		HttpSession session = request.getSession(); //세션을 생성함
		session.setAttribute("loginInfo", mem);
		
		return "memLoginOk";
	}
	

//2) HttpSession 사용
@RequestMapping(value = "/memLogin", method = RequestMethod.POST)
public String memLogin2(Member member, HttpSession session) {
session.setAttribute("loginInfo", member);
//service.memberSearch(member);

return "memLoginOk";
}

// 세션 객체 값 가져오기
@RequestMapping(value = "/memModifyForm", method = RequestMethod.POST)
	public ModelAndView memModifyForm(HttpServletRequest request) {
		
		HttpSession session = request.getSession();
		Member member = (Member)session.getAttribute("memInfo");
		ModelAndView mav = new ModelAndView();
		mav.addObject("memInfo", service.memberSearch(member));
		
		mav.setViewName("/member/modifyFrom");
		
		return mav;
	}
    

// 로그아웃 세션 만료
	public String Logout(Member member, HttpServletRequest request) {
		HttpSession sesstion = request.getSession();
		sesstion.invalidate();
		return "/";
	}

3. 쿠키(Cookie)

   - 쿠키를 생성할 때 생성자 첫번째에 쿠키이름, 두번째에는 쿠키값을 넣어준다.

@RequestMapping("/main")
	public String mallMain(Mall mall, HttpServletResponse response){
		
		Cookie genderCookie = new Cookie("gender", mall.getGender());
		
		if(mall.isCookieDel()) {
			genderCookie.setMaxAge(0);
			mall.setGender(null);
		} else {
			genderCookie.setMaxAge(60*60*24*30);
		}
		response.addCookie(genderCookie);
		
		return "/mall/main";
	}
	
    
    //쿠키 사용
    @RequestMapping("/index")
	public String mallIndex(Mall mall, 
			@CookieValue(value="gender", required=false) Cookie genderCookie, 
			HttpServletRequest request) {
		
		if(genderCookie != null) 
			mall.setGender(genderCookie.getValue());
		
		return "/mall/index";
	}
728x90
반응형