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 |