세션(Session)
세션(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>
댓글남기기