Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags more
Archives
Today
Total
관리 메뉴

David의 블로그

[JSP/Servlet]상태를 유지할 수 있는 Session, 세션(첫번째) 본문

프로그래밍/Jsp_Servlet

[JSP/Servlet]상태를 유지할 수 있는 Session, 세션(첫번째)

David 리 2024. 1. 20. 11:03

[Session, 세션]

클라이언트가 웹 브라우저를 통해 서버에 접속한 후, 용무를 처리하고 웹 브라우저를 닫아

서버와의 접속을 종료하는 하나의 단위를 의미한다.

쉽게 말해, 세션은 클라이언트가 서버에 접속해 있는 동안 그 상태를 유지하는 것이 목적이다.

 

그리고 세션은 쿠키와 비교했을 때, 보안적으로 더 우수하다.

이유는 쿠키는 웹 브라우저에 저장이 되는 반면, 세션은 서버에서 생성되고 저장되기 때문이다.

또, 웹 브라우저를 닫으면(==서버와의 접속 끊음) 세션은 끊기고 다시 접속 시, 새로운 세션이 생성된다.

 

앞으로 포스팅 해 볼 세션연습은 

1. 간단한 세션예제로 로그인 연습

2. 세션멤버변수를 유틸클래스(VO)로 이용해 화면에 뿌려주기

3. web.xml에 세션타임아웃을 등록하여 하나의 페이지에서 세션종료 알림 팝업 만들기

을 해 볼 것이다.

 

 

[간단한 세션예제로 로그인 연습]

[sessionLoginForm.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인폼</title>
</head>
<body>
<form action="<%=request.getContextPath() %>/member/sessionLogin.jsp" method="post">
    아이디 : <input type="text" name="id" size="10"/>
    비밀번호 : <input type="password" name="password" size="10"/>
    <input type="submit" value="로그인"/>
</form>
</body>
</html>
cs

세션 로그인 폼이다.

아이디와 비밀번호 태그를 만들었다.

로그인 버튼을 누르면 sessionLogin.jsp 액션을 취한다.

 

 

[sessionLogin.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String id = request.getParameter("id");
    String pw = request.getParameter("password");
    
    if (id.equals(pw)) {
        session.setAttribute("MEMBERID", id);    
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 성공!</title>
</head>
<body>
    로그인에 성공했습니다!!
</body>
</html>
<%    } else { %>
<script>
    alert('로그인에 실패했씁니다!');
    history.go(-1);
</script>
<%    } %>    
cs

간단한 예제인 만큼 DB연동 없이

아이디와 비밀번호를 동일하게 입력했다면, 세션을 MEMBERID로 만들어주었다.

세션 멤버변수를 만들어 줄 때는 'session.setAttribute()'메소드를 쓰면 된다.

만약

아이디와 비밀번호를 다르게 입력했다면,

알럿창이 뜨고, history.go(-1)로 인해 다시 로그인 폼 화면(sessionLoginForm.jsp)으로 돌아 갈 것이다.

 

 

[sessionLoginCheck.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String memberId = (String)session.getAttribute("MEMBERID");
    boolean login = memberId == nullfalse : true;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 여부 검사</title>
</head>
<body>
<%
    if (login) {
%>
아이디 : "<%=memberId %>"로 로그인 한 상태
<%
    } else {
%>
로그인하지 않은 상태
<%
    }
%>
</body>
</html>
cs

세션 멤버변수를 가져와서

로그인 정보가 존재하는지 안하는지 분기하는 화면이다.

로그인 정보가 있다면 로그인 정보를 뿌려준다.

세션 멤버변수를 가져올 때

'session.getAttribute()'메소드를 쓰면 된다.

 

 

[sessionLogout.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    session.invalidate();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그아웃</title>
</head>
<body>
<script type="text/javascript">
    alert("로그아웃 됐습니다.");
    location.href="./sessionLoginForm.jsp";
</script>
</body>
</html>
cs

등록되어 있는 세션멤버변수를 삭제한다.

'session.invalidate()'메소드를 쓰면 된다.

 

이 메소드 외에도 'session.removeAttribute()'메소드가 있다.

첫번째, invalidate() 메소드는 모든 세션 속성값을 지우는 것이다.

두번째, removeAttribute() 메소드는 특정 속성값을 지울 때 사용된다.

 

 

[결과]

아이디 / 비밀번호 동일하게 aa로 넣어줬다.

 

 

 

아이디 / 비밀번호 다르게 넣어줬을 경우.

 

 

 

세션에 등록된 속성값 확인.

 

 

 

 

로그아웃 되는 동시에 세션이 삭제된다.