Java :: (Tindog) Login 하기 / Session과 Was(Web application Server)

suragryen·2024년 1월 31일
0

Tindog

목록 보기
1/3
post-thumbnail

🧑🏻‍🏫Was란 ?

WAS(Web Application Server):

  • "WAS"는 서버의 한 유형으로, 주로 동적인 웹 애플리케이션을 실행하고 관리하는 데 사용됩니다.
  • WAS는 웹 서버와는 달리 동적인 콘텐츠를 처리하고, 서블릿, JSP, EJB 등과 같은 서버 측 기술을 지원합니다.
  • 데이터베이스와의 상호 작용, 세션 관리, 트랜잭션 처리 등을 포함한 웹 애플리케이션의 핵심 로직을 담당합니다.

1. 요청

  • 클라이언트를 식별하는 session id를 생성한다.

  • 이미 세션이 존재할 경우 해당 세션을 식별하고 유지한다

2. 응답

  • 서버는 session id로 key와 value를 저장하는 HttpSession을 생성하고, session id를 저장하고 있는 쿠키를 생성하여 클라이언트에게 전송한다.

  • 클라이언트는 서버 측에 요청을 보낼 때, session id를 가지고 있는 쿠키를 전송한다.

  • 서버는 쿠키의 session id로 HttpSession을 찾는다.

  • javax.servlet.http.HttpSession으로 세션 데이터를 다룰 수 있다.


WAS는 세션을 통해 클라이언트에게 연결된 상태 정보를 저장합니다. 이는 예를 들어 로그인 정보, 장바구니 내용, 사용자의 상태 등을 포함할 수 있습니다. 세션 데이터는 서버 측에서 유지되므로 클라이언트는 _**세션 ID를 통해 서버에 저장된 데이터에 접근할 수 있습니다.**_

🚀세션 생성 및 얻기

HttpSession session = request.getSession();
HttpSession session = request.getSession(true);
  • request의 getSession() 메서드는 서버에 생성된 세션이 있다면 세션을 반환하고, 없다면 새 세션을 생성하여 반환한다. (인수 default가 true)

  • 새롭게 생성된 세션인지는 HttpSession의 isNew() 메서드로 알 수 있다.

HttpSession session = request.getSession(false);
  • request의 getSession()메서드의 파라미터로 false를 전달하면, 이미 생성된 세션이 있을 때 그 세션을 반환하고, 없으면 null을 반환한다.

🚀세션에 값 저장하기

setAttribute(String name, Object value)
session.setAttribute(이름, 값)
  • setAttribute는 name, value 쌍으로 객체 Object를 저장하는 메서드다.

  • 세션이 유지되는 동안 저장된다.

🚀세션 값 조회

getAttribute(String name)
  • getAttribute 메서드로 세션에 저장된 값을 조회할 수 있다.

  • 리턴 타입은 Object이므로 형변환이 필요하다.

String valeu = (String)session.getAttribute("name");

🚀세션 값 삭제

removeAttribute(String name)
invalidate()
  • removeAttribute 메서드로 name 값에 해당하는 세션 정보를 삭제할 수 있다.
  • invalidate로 모든 세션 정보를 한 번에 삭제할 수 있다.

⛳️Controller (login)

@RequestMapping(value = "/loginResult", method = {RequestMethod.GET, RequestMethod.POST})
	@ResponseBody
	public ModelAndView loginProc(@ModelAttribute LoginDTO loginDTO, 
			HttpSession session) {
		
		ModelAndView mav = new ModelAndView();
		
		 LoginDTO result = loginDAO.login(loginDTO);
		
		    if(result != null && result.getEmail() != null) {
		    	if(result.getMemgrade().equals("F")) {
		    		// 탈퇴했거나 강제탈퇴된 회원
		    		session.setAttribute("s_grade", result.getMemgrade());
		    		System.out.println("로그인 실패");
			        mav.setViewName("layout/member/loginFail");
		    	}else {
		    		// 로그인 성공 시
		    		session.setAttribute("s_email", result.getEmail());
			        session.setAttribute("s_nickname", result.getNickname());
			        session.setAttribute("s_grade", result.getMemgrade());
			        System.out.println((String)session.getAttribute("s_grade"));
			        session.setAttribute("s_gumqty", result.getGumqty());
			        System.out.println("로그인 성공");
			        System.out.println(result);
			        mav.setViewName("layout/home");
		    	}
		    } else {
		        // 로그인 실패 시
		        System.out.println("로그인 실패");
		        mav.setViewName("layout/member/loginFail");
		    }
		    return mav;
	}//loginProc end
  • 로그인 성공시 이메일, 닉네임, 회원등급이 세션에 올라가며 실패시에는 다시 시도 해 달라는 안내 문구가 뜬다

⛳️Controller (logout)

@RequestMapping("/logOut")
public ModelAndView logout(HttpSession session) {
	ModelAndView mav = new ModelAndView();
	session.removeAttribute("s_email");
	session.removeAttribute("s_nickname");
	session.removeAttribute("s_grade");
	session.removeAttribute("s_gumqty");
	mav.setViewName("layout/home");
	
	return mav;
}//logout end
  • logout시에는 세션이 제거된다.

WAS는 세션을 통해 클라이언트와 서버 간의 지속적인 상태를 유지하며 이를 통해 사용자는 여러 페이지 간에 정보를 공유하거나 유지할 수 있다!

참조
https://byul91oh.tistory.com/227
https://enai.tistory.com/29

profile
블로그 이사중 ☃︎

0개의 댓글