회원가입, 로그인 숙제

문이빈·2023년 9월 4일
0

롬복 이클립스 클릭하여 설치

노트북에서 안돼서..

숙제

-----------------writeForm.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>
<style type="text/css">
table {
	border-collapse:collapse;
}

#memberWriteForm div{
	font-size: 8pt;
	font-weight: bold;
	color: red;
}
</style>
</head>
<body>
<form id = "memberWriteForm" method="post" action="write.jsp">
	<table border="1" cellspacing ="0" cellpadding ="7">
		<tr>
			<td width="100" align ="center">이 름</td>
			<td>
				<input type="text" id="name" name="name" placeholder= "이름 입력">
				<div id="nameDiv"></div>
			</td>
		</tr>
		
		<tr>
			<th>아이디</th>
			<td>
				<input type="text" id="id" name="id" placeholder="아이디 입력" size="30">
				<input type="button" value="중복체크" onclick="checkID()">
				<input type="text" id="sw"> 
				<div id="idDiv"></div>
			</td>
		</tr>
		
		<tr>
			<th>비밀번호</th>
			<td>
				<input type="password" id="pwd" name="pwd" size="40">
				<div id="pwdDiv"></div>
			</td>
		</tr>
		
		<tr>
			<th>재확인</th>
			<td>
				<input type="password" name="repwd" id="repwd" size="40">
					
			</td>
		</tr>
		
		<tr>
			<td align = "center">성 별</td>
			<td>
					<input type="radio" name="gender" value="0">남성
					<input type="radio" name="gender" value="1">여성				
			</td>
		</tr>
		
		
		<tr>
			<th><label>이메일</label></th>
			<td>
				<input type="text" name="email1" id="email1" style="width:120px;">
				@
				<input type="text" name="email2" id="email2" style="width:120px;">
				<select name="email3" id="email3" style="width:120px;">
				<option value="직접입력">직접입력</option>
				<option value="naver.com">naver.com</option>
				<option value="gmail.com">gmail.com</option>
				<option value="nate.com">nate.com</option>
				</select>
			</td>
				
		</tr>
		
		<tr>
			<td><label>휴대폰</label></td>
			<td>
				<select name="tel1" id="tel1">
				<option value="010">010</option>
				<option value="011">011</option>
				<option value="016">016</option>
				<option value="019">019</option>
				</select>
				<input type="tel" id="tel2" name="tel2">	
				<input type="tel" id="tel3" name="tel3">	
			</td>
				
		</tr>
		
		
		<tr>
			<th><label>주 소</label></th>
			<td>
				<input type= "text" name="zipcode" id="zipcode"readonly>
				<input type= "button" value="우편번호검색" id="checkPostBtn"><br>
				<input type= "text" name="addr1" id="addr1" style="width: 400px;" placeholder="주소" readonly/><br>
				<input type= "text" name="addr2" id="addr2" style="width: 400px;" placeholder="상세주소"><br>
			</td>
		</tr>
		
		<tr>
			<th colspan="2">
				<button type="button" id="writeBtn">회원가입</button>
				<button type="button">다시작성</button>
			</th>
		</tr>
	</table>
</form>

<script type="text/javascript">
function checkID(){
//	var id = document.폼이름.name속성명.value;
//	var id = document.getElementById("id명").value;
	var id = document.getElementById("id").value;
	
	if(id =="")
		document.getElementById("idDiv").innerText = "먼저 아이디를 입력하세요.";
	else
		window.open("checkId.jsp?id=" +id, "checkId", "width=400 height=150 top=300 left=700");
}
</script>

<script type="text/javascript" src="http://code.jquery.com/jquery-3.6.1.min.js"></script>
<script src="http://localhost:8080/memberJSP/js/write.js"></script>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="http://localhost:8080/memberJSP/js/post.js"></script>
</body>
</html>

-----------------checkId.jsp-----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="member.dao.MemberDAO"%>
    
<%
//데이터

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

//DB
MemberDAO memberDAO = new MemberDAO();
boolean exist = memberDAO.isExistId(id);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="checkId.jsp">
<%if(exist){ %>
	<h3><%=id %>는 이미 사용 중입니다.</h3>
	아이디 <input type="text" name="id">
	<input type="submit" value="중복체크">
	
<%}else{ %>
	<h3><%=id %>는 사용 가능합니다.</h3>
	<input type="button" value="사용하기" onclick="checkIdClose('<%=id %>')">
<%} %>
</form>

<script type="text/javascript">
function checkIdClose(id){
	opener.document.getElementById("id").value = id;
	opener.document.getElementById("sw").value = id;
	window.close();
	opener.document.getElementById("pwd").focus();
}
</script>
</body>
</html>

-----------------write.js-----------------

$(function(){
	
	$('#email3').change(function(){
		var email3 = $('#email3').val();
		$('#email2').val(email3);
		
		if(email3 == '직접입력'){
			$('#email2').val('');
		}//if
	});
	
	$('#writeBtn').click(function(){
		$('#nameDiv').empty();
		$('#idDiv').empty();
		$('#pwdDiv').empty();
	
		if($('#name').val()==''){
			$('#nameDiv').text('이름을 입력하세요.');
			$('#name').focus();
			
		}else if($('#id').val()==''){
			$('#idDiv').text('아이디를 입력하세요.');
			$('#id').focus();
			
		}else if($('#pwd').val()==''){
			$('#pwdDiv').text('비밀번호를 입력하세요.');
			$('#pwd').focus();
			
		}else if($('#repwd').val() != $('#pwd').val()){
			$('#repwdDiv').text('비밀번호가 맞지 않습니다..');
			$('#repwd').focus();
			
		}else if($('#id').val() != $('#sw').val()){
			$('#idDiv').text('중복체크 하세요.');
			$('#id').focus();
			
		}else{
			$('#memberWriteForm').submit();
		}
	});
});

-----------------memberDAO.java-----------------

package member.dao;

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

import member.bean.MemberDTO;

public class MemberDAO {

	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String username = "c##java";
	private String password = "1234";
	
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	public MemberDAO() {
		try{
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	public void getConnection() {
		try {
			conn = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public boolean isExistId(String id){
		boolean exist = false;
		String sql = "select * from member where id = ?";
		getConnection();
		
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			
			if(rs.next()) exist = true;
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(rs != null) rs.close();
				if(pstmt != null) pstmt.close();
				if(conn != null) conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return exist;
	}
	
	public void write(MemberDTO memberDTO) {
		String sql = "insert into member values(?,?,?,?,?,?,?,?,?,?,?,?,sysdate)";
		getConnection();
		
		try {
			pstmt = conn.prepareStatement(sql); //생성
			
			pstmt.setString(1, memberDTO.getName());
			pstmt.setString(2, memberDTO.getId());
			pstmt.setString(3, memberDTO.getPwd());
			pstmt.setString(4, memberDTO.getGender());
			pstmt.setString(5, memberDTO.getEmail1());
			pstmt.setString(6, memberDTO.getEmail2());
			pstmt.setString(7, memberDTO.getTel1());
			pstmt.setString(8, memberDTO.getTel2());
			pstmt.setString(9, memberDTO.getTel3());
			pstmt.setString(10, memberDTO.getZipcode());
			pstmt.setString(11, memberDTO.getAddr1());
			pstmt.setString(12, memberDTO.getAddr2());
			
			pstmt.executeUpdate();//실행			
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(pstmt != null) pstmt.close();
				if(conn != null) conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public String login(String id, String pwd){
		String name = null;
		String sql = "SELECT * FROM MEMBER WHERE ID=? AND PWD=?";
		getConnection();
		
		try {
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				name = rs.getString("name");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(rs != null) rs.close();
				if(pstmt != null) pstmt.close();
				if(conn != null) conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}		
		
		return name;
	}
}

-----------------write.jsp-----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="member.bean.MemberDTO"%>
<%@ page import="member.dao.MemberDAO"%>
<%
//데이터
request.setCharacterEncoding("UTF-8"); //한글처리 - post일 경우

String name = request.getParameter("name");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String gender = request.getParameter("gender");
String email1 = request.getParameter("email1");
String email2 = request.getParameter("email2");
String tel1 = request.getParameter("tel1");
String tel2 = request.getParameter("tel2");
String tel3 = request.getParameter("tel3");
String zipcode = request.getParameter("zipcode");
String addr1 = request.getParameter("addr1");
String addr2 = request.getParameter("addr2");

MemberDTO memberDTO = new MemberDTO();
memberDTO.setName(name);
memberDTO.setId(id);
memberDTO.setPwd(pwd);
memberDTO.setGender(gender);
memberDTO.setEmail1(email1);
memberDTO.setEmail2(email2);
memberDTO.setTel1(tel1);
memberDTO.setTel2(tel2);
memberDTO.setTel3(tel3);
memberDTO.setZipcode(zipcode);
memberDTO.setAddr1(addr1);
memberDTO.setAddr2(addr2);

//DB
MemberDAO memberDAO = new MemberDAO();
memberDAO.write(memberDTO);

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>회원 가입이 되었습니다.</h3>
<input type="button" value="로그인" onclick="location.href='loginForm.jsp'">
</body>
</html>

-----------------memberDTO.java-----------------

package member.bean;

import java.util.Date;

import lombok.Data;

@Data
public class MemberDTO {
	private String name;
	private String id;
	private String pwd;
	private String gender;
	private String email1;
	private String email2;
	private String tel1;
	private String tel2;
	private String tel3;
	private String zipcode;
	private String addr1;
	private String addr2;
	private	Date logtime;
}

-----------------loginForm.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>
<style type="text/css">
table {
	border-collapse:collapse;
}

#memberloginForm div{
	font-size: 8pt;
	font-weight: bold;
	color: red;
}
</style>
</head>
<body>
<form id="memberloginForm" method="post" action="login.jsp">
	<table border="1" cellspacing ="0" cellpadding ="7">
		<tr>
			<th>아이디</th>
			<td>
				<input type="text" id="id" name="id" placeholder="아이디 입력" size="30">
				<div id="idDiv"></div>
			</td>
		</tr>
		
		<tr>
			<th>비밀번호</th>
			<td >
				<input type="password" id="pwd" name="pwd" size="40">
				<div id="pwdDiv"></div>
			</td>
		</tr>
		
		<tr>
			<th colspan="2">
				<button type="button" id="loginBtn">로그인</button>
				<button type="button" onclick="location.href='writeForm.jsp'">회원가입</button>
			</th>
		</tr>
	</table>
</form>

<script type="text/javascript" src="http://code.jquery.com/jquery-3.6.1.min.js"></script>
<script type="text/javascript">
$(function(){
	$('#loginBtn').click(function(){
		$('#idDiv').empty();
		$('#pwdDiv').empty();
		
		if($('#id').val()==''){
			$('#idDiv').text('아이디를 입력하세요.');
			$('#id').focus();
			
		}else if($('#pwd').val()==''){
			$('#pwdDiv').text('비밀번호를 입력하세요.');
			$('#pwd').focus();
			
		}else{
			$('#memberloginForm').submit();
		}
	});
});
</script>
</body>
</html>

-----------------login.jsp-----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="member.dao.MemberDAO"%>
<%
//데이터
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");

//DB
MemberDAO memberDAO = new MemberDAO();
String name = memberDAO.login(id, pwd);

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% if(name == null) { %>
	<h3>아이디 또는 비밀번호가 맞지 않습니다.</h3>
<%}else{ %>
	<h3><%=name %>님 로그인</h3>
<%} %>
</body>
</html>

받아서 처리하여 넘겨줌.


JSP

import

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%= new Date() %>

</body>
</html>

실행했을 때에 시간만 입력된다.


img

<%@ 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>

<img src="../image/망상토끼.gif" alt="망상토끼" width="200" height="200">

</body>
</html>


include

<%@ 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>

<h3>*** include directive ***</h3>
<%@ include file="today.jsp" %>


<h3>*** include JSP tag ***</h3>
<jsp:include page="image.jsp"></jsp:include>
<!-- 소스 코드를 드래그 해와라 -->

</body>
</html>

페이지 소스코드 보기.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<img src="../image/망상토끼.gif" alt="망상토끼" width="200" height="200">

image.jsp 페이지에서 위에 코드만 가져온 것 이라고 보면 된다.

today 파일에도 같은 변수를 입력하면 에러가 떨어진다.
변수를 설정한 후에 가져오면 아무런 문제 없다. 가져온 페이지에 있는 변수를 건들면 에러

변수를 설정한 것을 가져오면 아무런 문제없음

response

<h3>*** 3초 뒤에 네이버 이동 ***</h3>
<% response.setHeader("Refresh", "3;url=http://www.naver.com"); %>

그냥 이런게 있다 정도만 알아라~


forward, sendRedirect

sendRediredt - 각 파일마다 데이터가 공유가 되지 않음. 따로 따로 움직임
forward - 합병이 된다라고 생각하면 쉬울듯.
장점 - 데이터 공유
aa에 들어오면 bb를 보여줌 (주소는 aa, 결과는 bb)
request, response의 값은 aa의 것임

page(나 자신) < request(요청) < session < application

<%@ 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>

<font color="red"><b>
start.jsp - sendProc.jsp - sendResult.jsp 페이지 이동합니다.<br>
sendRedirect로 이동하므로 데이터는 공유하지 않습니다.<br>
주소는 sendResult.jsp가 보인다<br>
</b></font>
<br>

<font color="blue"><b>
start.jsp - forwardProc.jsp - forwardResult.jsp 페이지 이동합니다.<br>
forward로 이동하므로 데이터는 공유합니다.<br>
주소는 forwardProc.jsp로 보이지만 결과는 forwardResult.jsp가 나온다<br>
</b></font>
<br>

<input type="button" value="sendRedirect" onclick="location.href='sendProc.jsp'">
<input type="button" value="forward" onclick="location.href='forwardProc.jsp'">

</body>
</html>

----------------sendProc.jsp----------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
request.setAttribute("apple", "사과");

// 페이지 이동
response.sendRedirect("sendResult.jsp");
%>

----------------sendResult.jsp----------------

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

<%
String apple = (String)request.getAttribute("apple"); // apple의 실려있는 값을 가져오세요. 
// 단. sendProc의 request 객체와 sentResult의 request 객체와는 다른것이다.
%>

결과 = <%= apple %>

----------------forwardProc.jsp----------------

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

<%
request.setAttribute("apple", "사과");
%>

<jsp:forward page="forwardResult.jsp"></jsp:forward>

----------------forwardResult.jsp----------------

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

<%
String apple = (String)request.getAttribute("apple"); // apple의 실려있는 값을 가져오세요. 
// 단. sendProc의 request 객체와 sentResult의 request 객체와는 다른것이다.
%>

결과 = <%= apple %>

sendRedirect버튼을 클릭했을 때의 결과 (request가 다른 객체)

forward버튼을 클릭했을 때의 결과 (request가 같은 객체)

forward를 자주 쓰지 않아서

----------------forwardProc.jsp----------------

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

<%
request.setAttribute("apple", "사과");

// 페이지 이동
// forward와 같은 의미이다. - 훨씬 많이 쓴다.
// 인터페이스라 new가 안됨 -> 메소드를 이용해서 생성함.
RequestDispatcher dispatcher = request.getRequestDispatcher("forwardResult.jsp"); 
// 상대번지 , 절대번지 절대 x

// 제어권 넘기기
dispatcher.forward(request, response);
%>

결과는 같다.


----------------login.jsp----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="member.dao.MemberDAO"%>
<%
//데이터
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");

// DB
MemberDAO memberDAO = new MemberDAO();
String name = memberDAO.login(id, pwd);

// 응답
request.setAttribute("name", "?");
request.setAttribute("pwd", "?");

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% if(name == null) {
	response.sendRedirect("loginFail.jsp");
   }else{
	response.sendRedirect("loginOk.jsp?name="+name);
   } %>
<!-- response.sendRedirect("loginOk.jsp");는 데이터를 넘길 수 없어서 주소로 넘겨주면 된다. -->
</body>
</html>

----------------loginOk.jsp----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
String name = request.getParameter("name");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h3><%= name %>님이 로그인 하셨습니다.</h3>

</body>
</html>

----------------loginFail.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>
<h3>아이디 또는 비밀번호가 일치하지 않습니다.</h3>
</body>
</html>

sendRedirect로는 못보내니 주소로 보낸다

아이디로 들어갔을 때 이름이 한글이면(주소에 한글이 있으면 한글이 깨져서) 에러가 떨어짐
http://localhost:8080/memberJSP/member/loginOk.jsp?name=a

★한글깨짐 해결 방법

----------------login.jsp----------------

<%@page import="java.net.URLEncoder"%>

<% if(name == null) {
	response.sendRedirect("loginFail.jsp");
   }else{
	response.sendRedirect("loginOk.jsp?name="+ URLEncoder.encode(name, "UTF-8"));
   } %>
<!-- response.sendRedirect("loginOk.jsp");는 데이터를 넘길 수 없어서 주소로 넘겨주면 된다. -->

http://localhost:8080/memberJSP/member/loginOk.jsp?name=홍길동

중요한 사이트에서는 get방식으로 넘기면 안됨
(주소의 홍길동 이름을 다른 사람으로 바꾸면 그 사람 이름으로 로그인됨)
숨겨줘야됨
-> 쿠키 or 세션

쿠키, 세션

쿠키

Cookie cookie = new Cookie("쿠키명", "값");

  • 만드는건 서버가 만들고 저장은 클라이언트의 웹브라우저에 저장
  • 아이디 저장
  • 팝업창의 오늘 하루 창 띄우지 않음
  • 새로고침으로 조회수 늘리는 것을 방지할 때

  • 쿠키는 서버측에서 만듬
----------------login.jsp----------------

<% if(name == null) {
	response.sendRedirect("loginFail.jsp");
   }else{
	
	// 쿠키
	Cookie cookie = new Cookie("memName", name);
	cookie.setMaxAge(3); 						// 초 단위 - 3초뒤 쿠키값 사라짐 
	response.addCookie(cookie); // 클라이언트에 저장
	
	Cookie cookie2 = new Cookie("memId", id);
	cookie.setMaxAge(3);
	response.addCookie(cookie); // 클라이언트에 저장

	   response.sendRedirect("loginOk.jsp");
   } %>

PC당 한개씩 발생하는(PC고유 아이디) 세션 아이디(쿠키명)를 가지고 들어옴

----------------login.jsp----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
String name = request.getParameter("name");
String id = request.getParameter("id");

// 쿠키
Cookie[] ar = request.getCookies();// 특정 쿠키만을 가져오지 못한다. (모든 쿠키들을 다 가져온다.)
if(ar != null){ // 쿠키 살아있는 시간 3초여서 조건을 이와같이 잡음
	for(int i=0; i<ar.length; i++){
		String cookieName = ar[i].getName();
		String cookieValue = ar[i].getValue();
		
		if(cookieName.equals("memName")) name = cookieValue;
		if(cookieName.equals("memId")) id = cookieValue;
        
<body>

<h3><%= name %>님이 로그인 하셨습니다.</h3>

</body>

3초 뒤 새로고침

쿠키 삭제는 시간을 0으로 셋팅

----------------login.jsp----------------

<body>
<% if(name == null) {
	response.sendRedirect("loginFail.jsp");
   }else{
	// response.sendRedirect("loginOk.jsp?name="+ URLEncoder.encode(name, "UTF-8"));
	
	// 쿠키
	Cookie cookie = new Cookie("memName", name);
	cookie.setMaxAge(3*60*10); 						// 초 단위 - 30분 뒤 쿠키값 사라짐 
	response.addCookie(cookie); // 클라이언트에 저장
	
	Cookie cookie2 = new Cookie("memId", id);
	cookie2.setMaxAge(3*60*10);						// 초 단위 - 30분 뒤 쿠키값 사라짐 
	response.addCookie(cookie2); // 클라이언트에 저장
    
----------------loginOk.jsp----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
String name = request.getParameter("name");
String id = request.getParameter("id");

// 쿠키
Cookie[] ar = request.getCookies();// 특정 쿠키만을 가져오지 못한다. (모든 쿠키들을 다 가져온다.)
if(ar != null){ // 쿠키 살아있는 시간 3초여서 조건을 이와같이 잡음
	for(int i=0; i<ar.length; i++){
		String cookieName = ar[i].getName();
		String cookieValue = ar[i].getValue();
		/* 
		System.out.println("쿠키명 = " + cookieName);
		System.out.println("쿠키값 = " + cookieValue);
		System.out.println();
		*/ 
		
		if(cookieName.equals("memName")) name = cookieValue;
		if(cookieName.equals("memId")) id = cookieValue;
		
	}//for
}//if
// 세션
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h3><%= name %>님이 로그인 하셨습니다.</h3>
<input type="button" value="로그아웃" onclick="location.href='logout.jsp'">

</body>
</html>

----------------logout.jsp----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
// 쿠키
Cookie[] ar = request.getCookies();

if(ar != null){
	for(int i=0; i<ar.length; i++){
		if(ar[i].getName().equals("memName")){
			ar[i].setMaxAge(0); // 쿠키 삭제
			response.addCookie(ar[i]);// 클라이언트에 보내기 - 쿠키가 사라진 것은 전달
		}
		
		if(ar[i].getName().equals("memId")){
			ar[i].setMaxAge(0); // 쿠키 삭제
			response.addCookie(ar[i]);// 클라이언트에 보내기 - 쿠키가 사라진 것은 전달
		}
	}//for
}//if
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>로그아웃</h3>
</body>
</html>

30분 뒤에 쿠키 사라짐

로그아웃 클릭 후 다시 돌아와서 새로고침을 하면 쿠키 사라짐

세션 (남에게 보이면 안되는 것)

  • 웹서버쪽의 웹컨테이너에 상태를 유지하기 위한 정보가 저장
  • 각 클라이언트 고유 Session ID를 부여한다
  • 세션은 기본 시간 1800초(30분)

중요한 정보를 데이터에 실어보내면 안됨

----------------login.jsp----------------

<body>
<% if(name == null) {
	response.sendRedirect("loginFail.jsp");
   }else{
	session.setAttribute("memName", name);
	session.setAttribute("memId", id);
      response.sendRedirect("loginOk.jsp");
   } %>
</body>

----------------loginOk.jsp----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
String name = request.getParameter("name");
String id = request.getParameter("id");
name = (String)session.getAttribute("memName");
id = (String)session.getAttribute("memId");
%>

----------------logout.jsp----------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
session.removeAttribute("memName");
session.removeAttribute("memId");
			
session.invalidate(); //무효화
%>

30분 뒤에 쿠키 사라짐

로그아웃 클릭 후 다시 돌아와서 새로고침을 하면 쿠키 사라짐


메인화면 => index

index라는 말을 자주 사용 (생략이 가능하다는 말임)

----------------index.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>
<h1>*** 메인화면 ***</h1>

<!-- memId 세션이 없으면 회원가입 로그인이 뜨게 -->
<% if(session.getAttribute("memId") == null){%>
<h3><a href="/memberJSP/member/writeForm.jsp">회원가입</a></h3> 
<!-- (앞에 http://localhost:8080 )절대번지 -->

<h3><a href="./member/loginForm.jsp">로그인</a></h3>			 
<!-- 상대번지 -->

<%}else{%>
<!-- memId 세션이 있으면 로그아웃이 뜨게 -->
<h3><a href="./member/logout.jsp">로그아웃</a></h3>
<h3><a href="">글쓰기</a></h3>
<%}%>

<h3><a href="">목록</a></h3>

</body>
</html>

----------------loginOk.jsp----------------

<body>

<h3>
<img src="../image/망상토끼.gif" width="50" height="50" alt="망상토끼" 
	 onclick="location.href='../index.jsp'" style="cursor: pointer">
<%= name %>님이 로그인 하셨습니다.
</h3>

<input type="button" value="로그아웃" onclick="location.href='logout.jsp'">

</body>

그림을 클릭하면 아래와 같이 index.jsp로 가고 세션이 생겨서

로그아웃, 글쓰기가 나오게 하고

로그아웃을 하고 다시 들어오면 회원가입, 로그인이 나오게 함


숙제

0개의 댓글