본문 바로가기

공부!

JSP 로그인 상태 유지

로그인 페이지를 만들고 로그인 상태로 해당하는 페이지들을 돌아다녀도 로그인이 유지되는 상태를 구현해보려고 한다.


세션과 쿠키를 이용해야 하는 것 같다


일단 개념 잡기 전에 로그인 페이지를 간단하게 만들어 보았다.

<style>

.login{

position: absolute;

    width: 260px;

            height: 126px;

    border: 3px dotted purple;

            top: 42%;

             left: 45%;

         margin: -50px 0px 0px -50px;

}

.login p{

    width: 240px;

    height: 42px;

    margin: 0px;

   

}


</style>

처음에는 margin의 left, right 와 40% 주었다. 그런데 위치가 어정쩡해서 다른 사이트 로그인 창은 어떤식으로 되어있나 알아보았다.

다른 사이트는 margin:auto를 통해 자동 정렬을 했는데 똑같이 따라해보았는데 그래도 뭐가 아쉬워서 구글링으로 postion을 주고 top과 left에 50% 주었다.  그리고 margin의 -값을 이용해 정렬하는 방식(참고.http://nuli.navercorp.com/sharing/blog/post/1132794)을 사용했다. 다른 여러가지 방법도 있는데 난 맨위에 꺼 썻구 구글 도구로 top과 left의 %값을 미세하게 조절했다.

p w 사이에 공백은 하나 밖에 인식이 안된다 원래 스페이스바 3번이 들어갔는데 안나타는경우이다. 이럴 때는 &nbsp;&nbsp;&nbsp; 이렇게 넣어준다.


이제 세션을 이용하여 로그인 상태를 유지하기 전에, id/pw 식별/인증 기능부터 구현 하려고 한다.


udata에 id, pw 등에 애트리뷰트를 가진 테이블을 만든다


이렇게 만들고 적당한 튜플을 삽입한다. 


loginprocess.jsp의 일부분


  request.setCharacterEncoding("UTF-8");

    String id=request.getParameter("id");

    String passwd=request.getParameter("pw");

    Class.forName("oracle.jdbc.driver.OracleDriver");

    String url="jdbc:oracle:thin:@localhost:1521:xe";

   

    Connection dbcon=DriverManager.getConnection(url,"edujh","1234");

    Statement stmt=dbcon.createStatement();

    ResultSet rs=stmt.executeQuery("SELECT * FROM UDATA WHERE U_ID='"+id+"'");

->JDBC oracle 연동을 해준다. 


ORA-00942: table or view does not exist


라는 오류가 발생한다. UDATE인데 UDATA라고 써서 그런다 테이블 명 이럴땐 테이블 만들때 오타난 것이기 때문에 가볍게 바꿔준다.


ALTER TABLE UDATE RENAME TO UDATA; 

라고 해주면 된다. 


이제 로그인할 때 받은 값을 이용하여 식별 인증하고 세션 저장하고 삭제하는 기능을 구현한다.

페이지는 총 로그인페이지(session,jsp), 로그인처리페이지(loginprocess.jsp), 로그인후페이지(loginafter.jsp), 로그아웃페이지(logout.jsp)로 4개의 페이지다. 이거 구현하는데만 3시간 넘게 걸렸는데, 그 이유는


로그인페이지->로그인처리페이지->인증->로그인후페이지->로그아웃페이지->로그아웃완료->로그인페이지 이런식으로 움직이게 만들었는데, 중간에 세션 이름 바꿨는데 그걸 몰라서 다른페이지는 그대로 뒀고 그래서 결과는 널 처리되었고 세션저장해도 이름을 안바꿔서 계속 실패 뜨구 결국 로그인페이지로 돌아오는 루프만 계속 반복했다. 이걸 깨닫기까지 너무 오래걸렸다.. 하...


session.jsp

로그인할 때 id pw를 받는 form이다. 받으면 loginprocess.jsp로 값을 넘기게 되어있다.


loginprocess.jsp

if 절에서 rs에 값이 있는지를 확인하고 rs의 id,pw를 긁어와 받은 id,pw 값과 확인한다. 이때 성공하면 rs.close(); 어차피 안쓰기 때문에 미리 닫아준다. session.setAttribut("id",id); "id" 안에 id를 넣는 것이다. 그러면 다음 loginafter,jsp로 넘어가고 return;으로 다음 jsp들은 실행하지 않는다. 생각해보니 stmt.close(); , dbcon.close();도 return; 앞에 넣어줘야하는데 일단 넘어간다. (본문은 수정했으나 그래도 예외가 생기고 그로 인해 오류가 발생한다. 경우의 수를 더 생각해봐야한다.)


loginafter.jsp

여기서 문제였다. 저 if문 안에 있는 "id"가 원래는 "loginId" 이런거였는데 안바꿔서 계속 null 뜨고 계속 session.jsp로 되돌아간것이다. 오류는 세세하게 차분하게 봐야 해결할 수 있다. 이런걸로 시간 잡으면 너무 아깝다. 그다음은 로그아웃 버튼을 클릭하면 logout.jsp로 돌아간다. 페이지 이동 방법도 여러가지인데 다 알지 못한다. 추후 공부하는 걸로 한다. 




'공부!' 카테고리의 다른 글