야나도 프로젝트

나도 개발자 될수있어

Web Programming

Session

jmeen 2021. 8. 18. 21:11
728x90

상태 없는 HTTP 프로토콜 연결에 상태를 유지해주는 기술
쿠키와 비슷하지만, 세션은 클라이언트(브라우저)에 세션 ID만 부여해주고 실제 데이터는 서버에 저장

 

세션의 장점
- 각 클라이언트에 고유한 ID를 부여(정확한 구분 가능)
- 세션 ID로 클라이언트를 구분, 클라이언트의 요구에 맞는 맞춤형 서비스 제공 가능
- 실제 데이터들은 서버에 저장하기 때문에 쿠키보다 보안 면에서 우수


세션의 단점
- 세션 데이터는 서버에 저장되므로 서버상에 처리를 요구하는 부하와 저장 공간이 필요

 

서블릿 엔진에서 세션을 유지하는 방식

1. 세션 생성

else if ("login".equals(actionName)) {
			// 로그인 수행
			// 파라미터 확인
			String email = req.getParameter("email");
			String password = req.getParameter("password");
			UserDao dao = new UserDaoImpl();
			UserVo vo = dao.getUserByEmailandPassword(email, password);
			if (vo == null) {
				// 사용자가 없거나 비밀번호가 틀렸거나
				System.err.println("사용자 없음!");
				// 로그인 폼으로 돌아가기
				resp.sendRedirect(req.getContextPath() + "/users?a=loginform");
			} else {
				// 사용자 찾음
				System.out.print("사용자 찾음");

				// 사용자 정보를 서버에 기록 (세션)
				HttpSession session = req.getSession(true);
				// 객체를 세션에 저장
				session.setAttribute("authUser", vo);

				// 홈페이지로 리다이렉트
				resp.sendRedirect(req.getContextPath());
			}

지난번 로그인 구현한 곳에 단 두줄만 추가되었다. 

request.getSession(true) request에 대한 새로운 세션을 생성한 후 리턴
request.getSession(false) 현재 세션이 존재하면 기존 세션 리턴, 없으면 null 리턴
request.getSession() 현재 세션이 존재하면 기존 세션 리턴, 없으면 새로 생성한 세션 리턴

세션 객체의 기본 메서드

public void setAttribute(String name, Object value) value 객체를 name 키로 저장
public Object getAttribute(String name) name 키로 저장된 객체를 얻어 오기
public void removeAttribute(String name) name 키로 지정된 객체를 삭제
public void invalidate() 세션을 무효화(없애기)

JSP 페이지 내에서는 특별히 지정하지 않아도 HttpSession 객체를 session 이라는 이름으로 사용 가능

 

2. 세션 읽기

<%
String message = request.getParameter("message");
//세션확인
UserVo authUser = (UserVo) session.getAttribute("authUser");
%>
<!DOCTYPE html>
<html>
<head>

해당 jSP페이지의 최상단에서 이렇게 쓰면 세션을 불러올 수있다.

이것과 더불어 사용하는 코드는 다음과 같다.

<%
//세션확인
UserVo authUser = (UserVo) session.getAttribute("authUser");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>My Home</title>
</head>
<body>
	<h3>My Home</h3>
	<P><%=message%></P>
	<%
	if(authUser == null){
		
		// 로그인 안한 사용자
	%>
	<ul>
		<li><a href="<%=request.getContextPath() %>/users?a=joinform">회원가입</a></li>
		<li><a href="<%=request.getContextPath() %>/users?a=loginform">로그인</a></li>
	</ul>
	<% 	} else { 	%>
	<ul>
		<li><%=authUser.getName() %>님 안녕하세요!</li>
		<li><a href= "<%=request.getContextPath()%>/users?a=logout">로그아웃</a></li>
	</ul> 
	<%}%>

authUser가 없으면 현재 로그인세션한것이 없는것이다. 고로 로그인을 한것 것이고, 그러면 회원가입과 로그인 링크를 띄우면 되겠다. 반대로 존재하면, 로그인 정보를 읽어와 정보를 뿌리고, 로그아웃를 보이게 하면 되겠다.

 

 

'Web Programming' 카테고리의 다른 글

Web programming : Cookie  (0) 2021.08.18
MVC패턴 - 회원가입/ 로그인 구현  (0) 2021.08.17
웹프로그래밍 - MVC 패턴  (0) 2021.08.17
JSP 프로그래밍 연습  (0) 2021.08.13
JSP 태그  (0) 2021.08.13