고급JAVA 30강 - Session
Session 정보 저장하기
-
Session객체를 생성하거나 현재 Session정보 가져오기
형식1) request객체.getSession() 또는 request객체.getSession(true)
==> 현재 Session이 존재하면 현재 Session을 반환하고, 존재하지 않으면 새로운 Session을 생성한다.
형식2) request객체.getSession(false);
==> 현재 Session이 존재하면 현재 Session을 반환하고, 존재하지 않으면 null을 반환한다. -
setAttribute()메서드를 이용하여 Session값을 저장한다.
형식) session객체.setAttribute("key값", session값);
==> 'key값'은 문자열, 'session값'은 모든 종류의 데이터
저장된 Session정보 읽어오기
- Session객체 생성 또는 현재 Session가져오기
- 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 삭제하기
- Session객체 생성 또는 현재 Session가져오기
- removeAttribute()메서드로 개별적인 Session값 삭제하기
==> 형식) session객체.removeAttribute("key값")
==> Session객체는 삭제되지 않고 해당 'key값'에 설정된 session값만 삭제된다.
session.removeAttribute("userName"); //userName삭제
- 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;
}
//
}
Author And Source
이 문제에 관하여(고급JAVA 30강 - Session), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gksmf6699/고급JAVA-30강-Session저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)