티스토리 뷰

로그인한 사람들만 사용할 수 있도록 세션을 활용하는 방법을 알아보자.

 

 

세션(Session)이란?

일정 시간동안 같은 사용자(정확하게 브라우저를 말한다)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장하는 것이다. 서버에 저장되기 때문에 사용자 정보가 노출되지 않는다.

 

세션을 정할 때는 session.setAttribute(String name, value); 로 작성하면 된다.

예시 사진

 

사이트에 보여지는 jsp(04-02_Session_Client.jsp)에서 아이디와 비밀번호를 입력받은 후

처리해주는 jsp(04-02_Session_Sever.jsp)로 값을 넘겨주어 세션에 저장하도록 할 예정이다.

 

 

사이트에 보여지는 jsp(04-02_Session_Client.jsp) 코드

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html lang="en">
<head>
<title>login</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<script>

// ** 유효성 검사
function loginchk() {
    var regx = /^[a-zA-Z0-9]*$/;
    
    var id = document.getElementById("mem_id").value;
    var pw = document.getElementById("mem_pass").value;
    
 	// 아이디 입력 안 했을 때
    if(id.length == 0 || id == null) { 
       alert("아이디를 입력해주세요.");
       return false;
    }
 	// 비밀번호 입력 안 했을 때
    if(pw.length == 0 || pw == null) {
       alert("비밀번호를 입력해주세요.");
       return false;
    }
 
    // 아이디를 잘못입력 했을 때
    if (!regx.test(id)){
       alert("아이디는 영어, 숫자만 입력가능합니다.");
       return false;
    }
    document.form.submit();
 }
 </script>
</head>
<body>
	<h1>LOGIN</h1>
	<form method="post" action="04-02_Session_Server.jsp" onsubmit='return loginchk()'>
		<p> 아이디 : <input type="text" name="mem_id" placeholder="ID" id='mem_id'>
		<p> 암호 : <input type="password" name="mem_pass" placeholder="PASSWORD" id='mem_pass'>
		<p> <input type="submit" value="LOGIN">
		<input type="button" value="Sign Up"  onclick='window.open("Insert01.jsp")'>
	</form>
</body>
</html>

유효성 검사를 통해 잘못입력했을 때 생길 에러를 방지했다.

 

 

처리해주는 jsp(04-02_Session_Sever.jsp)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>처리해주는 JSP</title>
</head>
<body>
<%@ include file="dbconn.jsp" %>
<%
	// 입력된 아이디(mem_id), 비밀번호(mem_pss) 가져옴
	String mem_id = request.getParameter("mem_id");
	String mem_pass = request.getParameter("mem_pass");
	
	// 아이디(mem_id) 또는 비밀번호(mem_pss)가 null일 때
	if(mem_id == null || mem_pass == null) {
		response.sendRedirect("04-02_Session_Client.jsp");
	}
	
	// 서버에 저장되어 있는지 조회하기
	ResultSet rs = null;
	Statement stmt = conn.createStatement();

	String sql = "SELECT mem_pass FROM member WHERE mem_id='";
	sql += mem_id+"'";
	rs = stmt.executeQuery(sql);
		
	String mem_pass2="";
	
	// 서버의 비밀번호는 mem_pass2라고 함.
	while(rs.next()){
		mem_pass2 = rs.getString("mem_pass");
	}
	
	// 입력된 비밀번호와 서버의 비밀번호가 같을 때 세션에 저장하기
	if(mem_pass.equals(mem_pass2)) {
		session.setAttribute("mem_id",mem_id);
		session.setAttribute("mem_pass", mem_pass);
		response.sendRedirect("04-01-1_Photo_Client.jsp");
	}// 입력된 비밀번호와 서버의 비밀번호가 다를 때 경고창 띄우기
	else {
	      %>
	      <script>
	      alert("가입하지 않은 아이디이거나, 잘못된 비밀번호입니다.");
	      history.go(-1); </script>
	      <%
		   }
	
	stmt.close();
	conn.close();	
%>
</body>
</html>

 

 

오류창 잘 뜨나 봅시다.

 

 

 

이것저것 추가하고 크롬에서 로그인 하기

로그인 됐다!

근데 임시로 만든 계정이라 유출 될 정보가 없는데 왜 저런게 뜨지?

 

이제 로그인 후에 보여질 JSP에

	String mem_id = (String) session.getAttribute("mem_id");
	String mem_pass = (String) session.getAttribute("mem_pass");

이 코드를 추가하면 된다.

 

 

예시를 위한 jsp(계정삭제페이지)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<title>계정 삭제</title>
</head>
<body>
  <%
      String mem_id = (String) session.getAttribute("mem_id");
      String mem_pass = (String) session.getAttribute("mem_pass");


      if (mem_id == null || mem_pass == null){
          response.sendRedirect("04-02_err_Session_Client.jsp");
      }
  %>


	<form method="post" action="Delete01_process.jsp">
		<input type="text" name="mem_id" placeholder="ID를 입력해주세요" id="mem_id" />
		<br>
		<input type="text" name="mem_pass" id="mem_pass"placeholder="비밀번호를 입력해주세요" />
		<input type="submit" value="Delete" class="special" /></li>
		<input type="reset" value="Reset" /></li>
	</form>
</body>
</html>

실행하면 계정삭제 jsp가 아닌 미리 만들어둔 jsp파일(04-02_err_Session_Client.jsp) 실행 된다.

반응형
LIST
댓글
링크
공지사항
최근에 올라온 글