세션(Session)

  • 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장
    • 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장
  • 웹 브라우저와 웹 서버의 상태유지가 훨씬 안정적이고 보안상의 문제도 해결
  • 웹 서버는 각각의 웹 브라우저로부터 발생한 요청에 대해서 특정한 식별자를 부여
    • 이것을 사용해서 세션을 구분 및 유지
sessionLogin.jsp 파일 폼

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h3>로그인/로그아웃 페이지</h3>
<%	if(session.getAttribute("userId") == null ){	%>
	<form method="post" action="sessionloginPro.jsp">
		<div id="auth">
			<dl>
			
				<dd>
					<label for="userId">아이디</label>
					<input type="text" name="userId" id="userId" placeholder="user01" autofocus required>
				</dd>
				
				<dd>
					<label for="userPw">비밀번호</label>
					<input type="password" name="userPw" id="userPw" placeholder="1234" autofocus required>
				</dd>
				
				<dd>
					<input type="submit" value="로그인">
				</dd>
				
			</dl>
		</div>
	</form>
<%}else{ %>
	<form method="post" action="sessionlogout.jsp">
		<div id="auth">
			<dl>
				<dd>
					<%=session.getAttribute("userId") %>님이 로그인중입니다.
				</dd>
				
				<dd>
					<input type="submit" value="로그아웃">
				</dd>
			</dl>
		</div>
	</form>
<%} %>

</body>
</html>
// 자바 작동파일 

package ch10.login;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

// 자바빈(Java Bean)을 이용한 로그인 기능.(비즈니스 로직)
// 싱글톤 패턴적용
public class LoginBean {
	
	// 1) 자신의 객체를 내부에서 생성
	private static LoginBean instance = new LoginBean();
	
	// 2) 외부에서 참조
	public static LoginBean getInstance() {
		return instance;
	}
	
	// 3) 생성자 접근못하도록 작업
	private LoginBean() {}
	
	// Connection 객체 생성
	private Connection getConnection() throws Exception{
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String id = "ezen";
		String password = "1234";
	
		Class.forName("oracle.jdbc.OracleDriver");
		
		return DriverManager.getConnection(url, id, password);
	}
	
	// 로그인 체크. x -> 1이면 로그인 성공, 0이면 비밀번호 틀림, -1이면 아이디 틀림
	public int loginCheck(String userid, String passwd) {
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		int x = -1;
		
		try {
			
			conn = getConnection();
			String sql = "SELECT PASSWD FROM MEMBER WHERE USERID = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userid);
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) { //아이디가 존재하는 경우
				String d_passwd = rs.getString("passwd");
				if(passwd.equals(d_passwd)) { // 사용자가 입력한 비밀번호와 DB에서 가져온 비밀번호 비교
					x = 1;
				} else { // 비밀번호가 틀린경우
					x = 0;
				}
			} else { // 아이디가 존재 안하는 경우
				x = -1;
			}
			
		} catch(Exception ex) {
			ex.printStackTrace();
		} finally {
			if(rs != null)
				try{pstmt.close();}catch(Exception ex){}
			if(pstmt != null)
				try{pstmt.close();}catch(Exception ex){}
			if(conn != null)
				try{conn.close();}catch(Exception ex){}
		}
		
		return x;
	}
}
sessionLoginPro.jsp 파일

<%@page import="ch10.login.LoginBean"%>

<%
	String userId = request.getParameter("userId");
	String userPw = request.getParameter("userPw");
	
	LoginBean login = LoginBean.getInstance();
	int check = login.loginCheck(userId, userPw);
	
	if(check == 1) {
		session.setAttribute("userId", "userPw"); // 인증통과 후 인증된 사용자 정보를 세션으료 저장
		response.sendRedirect("sessionLogin.jsp");
	} else if(check == 0) {
%>
	<script>
		alert("비밀번호가 틀립니다");
		history.go(-1); // 이전페이지로 이동
	</script>
<%
	} else if(check == -1) {
%>
	<script>
		alert("아이디가 틀립니다");
		history.go(-1); // 이전페이지로 이동
	</script>
<%
	}
%>
sessionLogout.jsp 파일

<%
	session.invalidate(); // 모든 세션정보를 소멸하기(로그아웃)
%>
<script>
	alert("로그아웃 되었습니다");
	location.href = "sessionLogin.jsp";
</script>

태그:

카테고리:

업데이트:

댓글남기기