고급JAVA 30강 - Session

Session 정보 저장하기

  1. Session객체를 생성하거나 현재 Session정보 가져오기
    형식1) request객체.getSession() 또는 request객체.getSession(true)
    ==> 현재 Session이 존재하면 현재 Session을 반환하고, 존재하지 않으면 새로운 Session을 생성한다.
    형식2) request객체.getSession(false);
    ==> 현재 Session이 존재하면 현재 Session을 반환하고, 존재하지 않으면 null을 반환한다.

  2. setAttribute()메서드를 이용하여 Session값을 저장한다.
    형식) session객체.setAttribute("key값", session값);
    ==> 'key값'은 문자열, 'session값'은 모든 종류의 데이터

저장된 Session정보 읽어오기

  1. Session객체 생성 또는 현재 Session가져오기
  2. getAttribute()메서드로 Session값을 읽어온다.
    형식) session객체.getAttribute("key값");
    session의 모든 'key값'을 가져온다.
Enumeration<String> sessionNames = session.getAttributeNames();
		while(sessionNames.hasMoreElements()) { // 다음 데이터가 있는지 검사
			
			// session의 'key값' 1개 가져오기
			String sessionKey = sessionNames.nextElement();
			Object data = session.getAttribute(sessionKey);
			
			out.println("<dt>" + sessionKey + "</dt>");
			if(data instanceof MemberVO) {
				MemberVO memvo = (MemberVO)data;
				out.println("<dd>" + memvo.getMem_id() + "<dd>");
				out.println("<dd>" + memvo.getMem_name() + "<dd>");
				out.println("<dd>" + memvo.getMem_pass() + "<dd>");
				out.println("<dd>" + memvo.getMem_tel() + "<dd>");
				out.println("<dd>" + memvo.getMem_addr() + "<dd>");
				
			}else {
				out.println("<dd>" + data + "</dd>");
			}
		}

세션ID ==> 세션을 구분하기 위한 고유한 값

out.println("세션ID : " + session.getId() + "<br>");

생성 시간 ==> 1970년 1월1일부터 경과한 시간(밀리세컨드 단위)

out.println("세션 생성 시간 : " + session.getCreationTime() + "<br>");

최근 접근 시간 ==> 1970년 1월1일부터 경과한 시간(밀리세컨드 단위)

out.println("세션 최근 접근 시간 : " + session.getLastAccessedTime() + "<br>");

세션 유효 시간 ==> 세션이 생성된 후에 유지되는 시간(초 단위)
==> 유효시간 설정 : session객체.setMaxInactiveInterval(시간);

out.println("<br><hr><br>");
		out.println("세션 유효 시간 : " + session.getMaxInactiveInterval() + "<br>");

Session 삭제하기

  1. Session객체 생성 또는 현재 Session가져오기
  2. removeAttribute()메서드로 개별적인 Session값 삭제하기
    ==> 형식) session객체.removeAttribute("key값")
    ==> Session객체는 삭제되지 않고 해당 'key값'에 설정된 session값만 삭제된다.
session.removeAttribute("userName"); //userName삭제
  1. invalidate()메서드로 삭제하기
    ==> Session객체 자체가 삭제된다.
    형식) session객체.invalidate();
session.invalidate();

  • 로그인 화면 구현

sessionLogin.do

package kr.or.ddit.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import kr.or.ddit.basic.vo.MemberVO;

@WebServlet("/sessionLogin.do")
public class SessionLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 로그인 처리
		request.setCharacterEncoding("utf-8");
		
		// 사용자가 입력한 id와 password를 파라미터로 받는다.
		String userid = request.getParameter("userid");
		String pass = request.getParameter("pass");
		
		MemberDao dao = MemberDao.getInstance();
		
		// 입력받은 데이터를 MemberVO 객체에 담는다.
		MemberVO memVo = new MemberVO();
		memVo.setMem_id(userid);
		memVo.setMem_pass(pass);
		
		HttpSession session = request.getSession();
		
		//DB에서 id와 password를 이용하여 해당 회원 정보를 가져온다.
		MemberVO returnMemVo = dao.getLoginMember(memVo);
		if(returnMemVo==null) { // 로그인 실패
			response.sendRedirect(request.getContextPath() + "/session/sessionLogin.jsp");
		}else { // 로그인 성공
			session.setAttribute("loginMember", returnMemVo);
			response.sendRedirect(request.getContextPath() + "/session/sessionLogin.jsp");
		}
	
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}

sessionLogin.jsp

<%@page import="kr.or.ddit.basic.vo.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Login</title>
<style>
#login{
	text-align: center;
}
#log{
	padding: 20px;
	border: 1px solid red;
	width: 250px;
	
}
</style>
</head>
<body>
<div id="log">
<%
	// 상태표시값
	String hideTable = ""; //로그인 성공 못했을 때
	String hideLogout = ""; //로그인 성공했을 때
	boolean flag = false;
	
	MemberVO memVo = (MemberVO)session.getAttribute("loginMember");
	
	if(memVo==null){ // Session 값이 없을 때.. (로그인이 안되었을 때)

%>
<form action="<%=request.getContextPath()%>/sessionLogin.do" method="get" <%=hideTable%>>
	<table border='1'>
	
		<tr>
			<td>ID</td>
			<td><input type="text" name="userid" placeholder="ID를 입력하세요"></td>
		</tr>
		
		<tr>
			<td>PASS</td>
			<td><input type="password" name="pass" placeholder="PASSWORD를 입력하세요"></td>
		</tr>
	
		<tr>
			<td id="login" colspan="2"><input type="submit" value="Login"></td>
		</tr>
		
	
	</table>
</form>
<% }else{ %>

<div <%=hideTable%>>
	<h3><%=memVo.getMem_name()%>님 반갑습니다.</h3>
	<br>
	<a href="<%=request.getContextPath() %>/sessionLogout.do">로그아웃</a>
</div>

<% } %>
</div>
</body>
</html>

sessionLogout.do

package kr.or.ddit.session;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/sessionLogout.do")
public class SessionLogout extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		// 로그아웃은 세션 정보를 모두 삭제하면 된다.
		
		HttpSession session = request.getSession();
		
		session.invalidate(); // 세션 삭제
		
		response.sendRedirect(request.getContextPath() + "/session/sessionLogin.jsp");
	
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

MemberDao

package kr.or.ddit.session;

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

import kr.or.ddit.basic.vo.MemberVO;
import kr.or.ddit.util.DBUtil3;

public class MemberDao {
	private static MemberDao dao;
	
	private MemberDao() {}
	
	public static MemberDao getInstance() {
		if(dao==null) dao = new MemberDao();
		return dao;
	}
	
	public MemberVO getLoginMember(MemberVO memVo) {
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		
		MemberVO memberVo = null; // 로그인한 결과가 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			
			String sql = "select * from mymember"
					+ " where mem_id=? and mem_pass=? ";
			psmt = conn.prepareStatement(sql);
			
			psmt.setString(1, memVo.getMem_id());
			psmt.setString(2, memVo.getMem_pass());
			
			rs = psmt.executeQuery();
			
			if(rs.next()) {
				memberVo = new MemberVO();
				
				memberVo.setMem_id(rs.getString("mem_id"));
				memberVo.setMem_pass(rs.getString("mem_pass"));
				memberVo.setMem_name(rs.getString("mem_name"));
				memberVo.setMem_tel(rs.getString("mem_tel")); 
				memberVo.setMem_addr(rs.getString("mem_addr")); 
			}
			
		} catch (SQLException e) {
			memberVo = null;
			e.printStackTrace();
		
		}finally {
			if(rs!=null)try {rs.close();}catch(Exception e) {}
			if(conn!=null)try {conn.close();}catch(Exception e) {}
			if(psmt!=null)try {psmt.close();}catch(Exception e) {}
		}
		
		return memberVo;
	}
	
	// 메소드
	// 로그인 성공 - 아이디, 패스워드가 모두 같을 때 / 리턴값 : int? 
	public int selectId(String memid, String pass) {
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		conn = DBUtil3.getConnection();
		String sql = "select count(*) from mymember " + 
				" where MEM_ID = ? " + 
				" and MEM_PASS = ?";
		int result = 0;
		try {
			psmt = conn.prepareStatement(sql);
			psmt.setString(1, memid);
			psmt.setString(2, pass);
			psmt.execute();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(conn!=null)try {conn.close();}catch(Exception e) {}
			if(psmt!=null)try {conn.close();}catch(Exception e) {}
		}
		
		
		return 0;
	}
	//
	
	
}

좋은 웹페이지 즐겨찾기