자바개발과정/JSP&Servlet

회원관리 시스템 로그인부분(쿠키)

경진 2008. 7. 14. 19:10
회원관리 시스템 로그인부분 (쿠키)

cookieLoginConfirm.jsp - 2008.7.11 작성했다 (버림받은 파일)
index.jsp - 로그인 폼 추가
cookieMemberLoginOk.jsp - 회원인증 메소드를 호출해 결과를 받아서 index.jsp 에 보내는 역할을 하는 페이지
cookieLogOut.jsp - 로그아웃 페이지
MemberCtrl.java - 회원 인증 메소드 추가

MemberCtrl.java에서 메소드를 하나 추가한다.

    /*
    * 회원인증하기
    * @param: mem_id, mem_pw
    * @return: int
    * 사용자가 입력한 아이디와 비번이 존재하면 1을 리턴.
    */

    public int ismemberList(String mem_id, String mem_pw) {
        int mode = 0;
        pool = DBConnectionMgr.getInstance();
        query = new StringBuffer();
        query.append("SELECT mem_pw FROM member WHERE mem_id = ? AND mem_status = 1");
        String db_pw = mem_pw;
        try {
            con = pool.getConnection();
            pstmt = con.prepareStatement(query.toString());
            pstmt.setString(1, mem_id);
            rs = pstmt.executeQuery();
            if(rs.next()) {
                db_pw = rs.getString(1);
                if(mem_pw.equals(db_pw)) {
                    mode = 1; //인증성공
                } else {
                    mode = 0; //비밀번호 틀림
                }
            } else {
                mode = -1; //아이디 존재하지 않음
            }
        }catch(SQLException s){
            System.out.println("=============================================");
            System.out.println("query:"+query.toString());
            System.out.println("=============================================");
            System.out.println(s.toString());
        } catch (Exception e) {
            System.out.println(e.toString());
        } finally{
            pool.freeConnection(con, pstmt);
        }
        return mode;
    }

    public int ismemberList(String mem_id, String mem_pw) {
        int mode = 0;

        String db_pw = mem_pw;

            if(rs.next()) {
                db_pw = rs.getString(1);
                if(mem_pw.equals(db_pw)) {
                    mode = 1; //인증성공
                } else {
                    mode = 0; //비밀번호 틀림
                }
            } else {
                mode = -1; //아이디 존재하지 않음
            }

ismemberList 메소드에 인자를 String형으로 아이디(mem_id)와 비밀번화(mem_pw)를 받는다.
리턴 타입은 int 형으로 아이디와 비밀번호가 DB에 있으면 1을 리턴 비밀번호가 다르면 0을 아이디가 없으면 -1을 반환한다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR" import="com.chapter04.*"%>

import="com.chapter04.*"
MemberCtrl.java 파일을 사용하기 위해 임포트해준다.

<% request.setCharacterEncoding("euc-kr"); %>

클라이언트에서 요청이 있을때 웹페이지(폼)에서 전송받은 값의 인코딩 형식을 한글로 사용한다.

<%
    String id = request.getParameter("mem_id");
    String passwd = request.getParameter("mem_pw");

index.jsp의 로그인 폼에 사용자가 입력한 정보(아이디, 비밀번호)를 각각 문자형 id, passwd에 대입한다.

    MemberCtrl mctrl = new MemberCtrl();

메소드를 사용하기위해 클래스를 인스턴스화 한다.

    int check = mctrl.ismemberList(id, passwd);

MemberCtrl 클래스의 ismemberList 메소드에 인자값을 사용자가 입력한 id 와 passwd를 넘겨 실행한 후 결과를 받아 check 변수에 대입한다.

    if(check == 1) {

check 변수의 값이 1이면 DB에 정보가 있는 값이다. 다음 구문을 실행한다.

        Cookie cookie = new Cookie("memId", id);

Cookie 클래스를 생성한다.
생성자에 memId와 사용자가 입력한 id값을 넘긴다.

        cookie.setMaxAge(20*60);

쿠키의 유효시간?을 20분?으로 설정한다.

        response.addCookie(cookie);

쿠키를 생성하면 반드시 addCookie메소드를 사용해 쿠키를 추가해야한다.

        response.sendRedirect("index.jsp");

index.jsp 페이지로 이동한다.

%>
<%       
    } else if(check == 0) {
%>
<script type="text/javascript">
    alert("비밀번호가 맞지 않습니다.");
    history.go(-1);
</script>
<% } else { %>
<script type="text/javascript">
    alert("아이디가 맞지 않습니다.");
    history.go(-1);
</script>
<% } %>

자세한 내용은 p418 ~ p436 참고한다.
오라클에서 칼럼 추가

토드를 실행한다.