본문 바로가기
Java | spring/JSP | MVC 패턴

JSP session, 사용자 상태유지( 로그인 유지 )

by 워니 wony 2019. 5. 18.

상태유지를 확인하기 위한 session

  • 사용자의 현재 상태를 유지시키기 위하여 JSP 제공하는 내장 객체
  • 쿠키 방식과 달리 정보를 모두 저장하지 않고 id만을 브라우저에 저장하고 서버측의 id 브라우저의 id 비교해 같은 값이면 서버측의 정보를 실행
  • 예를 들어 진짜 로그인을 하고 있는지 판단하고 싶은 경우 사용

 

session 사용

  • 사용하는 방법은 마치 map 유사
  • session 객체의 값을 담는    
    • setAttribute(key, value);
  • session 객체에 담긴 값을 읽어 오는
    • Object 변수명 = session.getAttribute(key);
      반환을 오브젝트로 하기 때문에 변수에 담는 경우 해당 객체로 캐스팅이 필요하다.

로그인 기능 ( session )

   - DB연동 체크 후 로그인 상태 유지해서 로그인 전용 페이지로 연결 하는 기능 구현

 

 

로그인 페이지(사용자가 아이디와 암호 입력) / login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="LoginOk.jsp" method="post">
		아이디 <input type="text" name="id"><br>
		비밀번호 <input type="password" name="pwd"><br>
		<input type="submit" value="로그인">
	</form>
</body>
</html>

 

 

로그인이 제대로 되었는지 확인하는 페이지 / LoginOk.jsp

<%@page import="com.db.MemberDao"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		
		MemberDao dao = new MemberDao();
		String name = dao.isMember(id, pwd);
		
		
		if(name != null)
		{ 
			session.setAttribute("member", "ok");
			System.out.println(name);
			%>
			<jsp:forward page="main.jsp">
				<jsp:param value="<%=name%>" name="name"/>
			</jsp:forward>
			<%		
		}
		else
		{
			response.sendRedirect("login.jsp");	
		}
	%>
</body>
</html>

 

 

로그인이 DB 받아 오기 위한 ConnectionProvider 클래스

package com.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ConnectionProvider {
	
	public static Connection getConnection()
	{
		Connection conn = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@203.236.209.94:1521:XE", "madang", "madang");
			
		}catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
		return conn;
	}
	
	public static void close(ResultSet rs, Statement stmt, Connection conn)
	{
		try {
			rs.close();
			stmt.close();
			conn.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
		}
		
	}
}

 

 

로그인 정보와 DB 확인 하기 위한 DAO / MemberDao.jsp

package com.db;

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

public class MemberDao {
	
	public String isMember(String id, String pwd)
	{
		String name = null;
		String sql = "select name from member where id=? and pwd=?";
		try {
			Connection conn = ConnectionProvider.getConnection();
			PreparedStatement pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
			ResultSet rs = pstmt.executeQuery();

			if(rs.next())
			{
				name = rs.getString(1);
			}
			
		}catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
		return name;
	}
	

}

 

 

로그인 완료를 알려주는 페이지 / main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="#E3E0EB">
	<%
		String re = (String)session.getAttribute("member");
	
		if(re==null)
		{
			response.sendRedirect("login.jsp");
		}
		
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		
		
	%>
	<h2><%=name %> 회원님 환영합니다.</h2>
	<hr>
	<a href="service01.jsp">1번째 서비스</a><br>
	<a href="service02.jsp">2번째 서비스</a><br>
	<a href="service03.jsp">3번째 서비스</a><br>
</body>
</html>

 

 로그인 섹션 확인 시 포함될 페이지 / sessionLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		if(session.getAttribute("member")==null)
		{
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>

 

 

  로그인 해야 있는 페이지/ 직접 session / service01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="C8EBFA">
	<%
		if(session.getAttribute("member")==null)
		{
			response.sendRedirect("login.jsp");
		}
	%>
	<h2>1번째 서비스 입니다.</h2>
	<hr>
	<a href="service02.jsp">2번째 서비스</a><br>
	<a href="service03.jsp">3번째 서비스</a><br>
</body>
</html>

 

 

 

로그인 해야 있는 페이지 session /지시자include / service02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="FBCFD0">
	<%@include file="sessionLogin.jsp" %>
	<h2>2번째 서비스 입니다.</h2>
	<hr>
	<a href="service01.jsp">1번째 서비스</a><br>
	<a href="service03.jsp">3번째 서비스</a><br>
</body>
</html>

반응형

댓글