[JSP] session을 사용한 로그인 상태 유지

Jeini·2023년 5월 3일
0

🌐 JSP

목록 보기
23/24
post-thumbnail

💡 로그인 처리 방식


  1. 로그인에 성공하면 session 기본 객체의 특정 속성에 데이터를 기록한다.
  2. 이후로 session 기본 객체의 특정 속성이 존재하면 로그인한 것으로 간주한다.
  3. 로그아웃할 경우 session.invalidate() 메서드를 호출하여 세션을 종료한다.

💡 인증된 사용자 정보 session에 저장하기


✔️ session 기본 객체의 속성에 로그인 성공 정보 저장

✏️ sessionLoginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/sessionLogin.jsp" method="post">
	아이디 <input type="text" name="id"><br>
	비번 <input type="text" name="pw"><br>
	<input type="submit" value="로그인">
</form>

</body>
</html>

✏️ sessionLogin.jsp

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

	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	
	// 로그인 성공 시 session 속성에 로그인 상태 저장
	if(id.equals(pw)) {
		session.setAttribute("memberId", id);
	

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 성공</title>
</head>
<body>

	로그인에 성공하였습니다.

</body>
</html>
<%
	} else {
%>
<script>
	alert("로그인에 실패하였습니다.");
	history.go(-1);
</script>
<%
	}
%>
  • memberId 속성이 존재하면 현재 사용자는 로그인한 사용자로 간주

💡 인증 여부 판단


✔️ 로그인 상태를 위한 속성의 존재 여부에 따라 로그인 상태를 판단

  1. sessionLogin.jsp에서 로그인에 성공하면 memberId 속성에 로그인 상태 정보를 보관
  2. memberId 속성을 사용하여 로그인 여부를 판단

✏️ sessionLoginCheck.jsp

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

	String memberId = (String)session.getAttribute("memberId");
	boolean login = memberId == null ? false : true;

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 여부 검사</title>
</head>
<body>
<%

	if(login) {
%>
		아이디 "<%= memberId %>" 로 로그인 한 상태
<%
	} else {

%>
		로그인하지 않은 상태
<%

	}
%>
</body>
</html>

💡 로그아웃 처리


✔️ session.invalidate()를 사용하여 세션 종료

✏️ sessionLogout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	session.invalidate();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그아웃</title>
</head>
<body>

	로그아웃 하였습니다.

</body>
</html>
  • session 기본 객체를 모두 삭제해도 로그아웃한 효과를 낼 수 있다.
    : session.removeAttribute("memberId");

실전에서 만들어낼 때는 로그인할 때 등록되는 것이 단순하지 않다. 여러가지 속성과 객체가 등록되어지기 떄문에 invalidate() 를 사용하는 것이 좋다.

💡 연관된 정보 저장을 위한 클래스 작성


속성에 저장되는 값의 개수나 변수명의 개수가 증가할수록 코드를 분석하고 관리하는 데 더 많은 시간이 소요된다.

⭐️ class 사용
: 세션에 여러 속성을 사용해서 연관 정보들을 지정할 때 발생할 수 있는 문제점을 줄일 수 있는 방법

✏️ 회원과 관련된 정보를 클래스에 묶어서 저장

✏️ MemberInfo.java

package kr.ac.green;

import java.util.Date;

public class MemberInfo {
	private String id;
	private String password;
	private String name;
	private Date registerDate;
	private String email;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(Date registerDate) {
		this.registerDate = registerDate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

연관된 정보를 클래스로 묶어서 저장하면 각 정보를 개별 속성으로 저장하지 않고 한 개의 속성을 이용해서 저장할 수 있게 된다.

<%
	MemberInfo memberInfo = new MemberInfo(id, name);
    session.setAttribute("memberInfo", memberInfo);
%>

연관된 정보를 한 객체에 담아 저장하기 때문에, 세션에 저장한 객체를 사용할 때에도 객체를 가져온 뒤 객체로부터 필요한 값을 읽어올 수 있다.

profile
Fill in my own colorful colors🎨

0개의 댓글