- 로그인에 성공하면 session 기본 객체의 특정 속성에 데이터를 기록한다.
- 이후로 session 기본 객체의 특정 속성이 존재하면 로그인한 것으로 간주한다.
- 로그아웃할 경우
session.invalidate()
메서드를 호출하여 세션을 종료한다.
✔️ session 기본 객체의 속성에 로그인 성공 정보 저장
<%@ 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>
<%@ 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
속성이 존재하면 현재 사용자는 로그인한 사용자로 간주✔️ 로그인 상태를 위한 속성의 존재 여부에 따라 로그인 상태를 판단
memberId
속성에 로그인 상태 정보를 보관memberId
속성을 사용하여 로그인 여부를 판단<%@ 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()를 사용하여 세션 종료
<%@ 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.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);
%>
연관된 정보를 한 객체에 담아 저장하기 때문에, 세션에 저장한 객체를 사용할 때에도 객체를 가져온 뒤 객체로부터 필요한 값을 읽어올 수 있다.