-
로그인아웃, sessionJAVA 2021. 7. 26. 12:46
로그인
앞으로 jsp 의 <%@ %>: 디렉티브태그에 session="false" 를 넣자.
이 의미는 내가 만들기 전까지 session이 자동으로 만들어지는걸 방지하는 것이다.
>> 로그인준비.java
public class 로그인준비 implements IControl{ public ModelAndView process(HttpServletRequest request, HttpServletResponse response) { ModelAndView mv = new ModelAndView(); mv.addObject("key", "value"); mv.setViewName("로그인창"); return mv; } }
>> 로그인창.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>로그인</h1> <p>${msg}</p> <form action="login.do" method="post" onsubmit="return 필수입력()"> id <input type="text" id="id" name="id"/> password <input type="password" id="password" name="password"/> <input type="submit" value="로그인"/> </form> </body> </html> <script> function 필수입력(){ var id = document.querySelector("#id").value; var password = document.querySelector("#password").value; if(id==null || id==""){ alert("아이디를 입력하세요"); return false; } if(password==null || password==""){ alert("비밀번호를 입력하세요"); return false; } return true; } </script>
>> 로그인.java (MemberDAO 의 isin() 메서드 수정함// 밑에서 확인)
public class 로그인 implements IControl{ public ModelAndView process(HttpServletRequest request, HttpServletResponse response) { //요청 String id = request.getParameter("id"); String password = request.getParameter("password"); MemberDAO dao = new MemberDAO(); Object[] NoAndName = dao.isin(id, password); ModelAndView mv = new ModelAndView(); if(NoAndName==null) { //여기서 조건을 따져 forward 로 보내며 msg 까지 설정하면 로그인준비 control 에서 다시 조건을 따져 request 로 값을 받고 view 넘기지 않아도 //이 값들이 request에 누적되어 view까지 넘어간다. mv.addObject("msg", "id 또는 비밀번호가 일치하지 않습니다."); mv.setViewName("forward:/prepare_login.do"); return mv; } // 로그인할 때만 session 을 만들고 로그인했으니 회원번호를 session에 저장하여 앞으로 나올 페이지들을 회원껄로 바꿔야한다. HttpSession session = request.getSession(); session.setAttribute("no", NoAndName[0]); // 회원 번호 저장. session.setAttribute("name", NoAndName[1]); // 회원 번호 저장. session.setMaxInactiveInterval(60*30); // s(초) 단위. session이 존재하는 시간. 즉, 로그인 유지시간이다. web.xml 에서도 지정가능하며 거기는 분단위다. mv.setViewName("로그인성공");//아직없는창 return mv; } }
>> MemberDAO.java ( name 만 나왔는데 이제 no, name 두개를 Object[] 에 담아서 나온다.)
public Object[] isin(String id, String password) { Object[] NoAndName = null; try { Connection c = ConnectionUtil.getConnection(); PreparedStatement pre = c.prepareStatement("select no,name from member where id = ? and password = ?"); pre.setString(1, id); pre.setString(2, password); ResultSet set = pre.executeQuery(); if(set.next()) { int no = set.getInt("no"); String name = set.getNString("name"); NoAndName = new Object[2]; NoAndName[0] = no; NoAndName[1] = name; } set.close(); pre.close(); c.close(); } catch (Exception e) { e.printStackTrace(); } return NoAndName; }
>> 로그인성공.jsp
<body> ${name} 님 환영합니다. <a href="contents.do">내용</a> </body>
>> 내용보이기.java
public class 내용보이기 implements IControl { @Override public ModelAndView process(HttpServletRequest request, HttpServletResponse response) { ModelAndView mv = new ModelAndView(); mv.setViewName("내용창"); return mv; }
>> 내용창.jsp
<body> <jsp:include page="로그인상단.jsp"/> <p> Acknowledgements To the Student To the Teacher </body>
>> 로그인상단.jsp
상단에서 먼저 session 이 null 이 아니지만 다른 값이고 로그인시 name 이 저장되어야 하는데 null인 경우 session을 null로 바꾼다.
그리고 하단에서 로그인여부(session존재여부) 를 따져 나올 내용을 정한다.
<% HttpSession session= request.getSession(false); if(session!=null&& session.getAttribute("name")==null){session=null;} %> <!DOCTYPE html> <html> <head> <style> </style> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% if(session!=null){ %> <%=(String)session.getAttribute("name") %><img src="img/logined.png"/><button onclick="location.href='logout.do'">로그아웃</button> <%}else{ %> <button onclick="location.href='prepare_login.do'">로그인</button> <%} %> </body>
로그아웃
>> 로그아웃.java
@Override public ModelAndView process(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(false); if(session != null) { session.invalidate(); } ModelAndView mv = new ModelAndView(); mv.setViewName("forward:/contents.do"); return mv; }
Session
: 로그인, 로그아웃 시 필요
HttpSession session= request.getSession(false); if(session!=null&& session.getAttribute("name")==null){session=null;}
session을 통해 로그인 여부 확인하기
(로그인시 session을 생성하고 또는 이미존재하는걸 가져오고, 회원의 이름을 저장해놓은 상태다)1. getSession(false) : session 이 없다면 null 로 설정하고 한다.
session에 값이 있는지 확인하기위해 가져오기는 해야하니 getSession(false) 로 가져와 없으면 메서드의 매개변수(false)를 사용해
null 로 만든다.
(if문을 수행하지 않아도 null이다.)2. 만약 존재한다면 그 session 에 회원이 로그인 했을 시 있을 회원이름이 존재하는지 확인한다.
만약 없고 null 이라면 session 을 null 로 바꿔 앞으로 로그인 여부확인 시 로그아웃상태임을 알린다.session.invalidate() // session 값들 초기화
로그아웃 시 session 을 없애기 invalidate() 라는 메서드로 session 을 없앤다. 'JAVA' 카테고리의 다른 글
Spring, Tomcat Servers의xml파일정리 (0) 2021.07.26 UML: ClassDiagram,SequenceDiagram, Servlet:Filter (0) 2021.07.26 redirect, forward,spring 서두 (0) 2021.07.26 JSP: FrontController 직접 구현해보기 (0) 2021.07.26 이미지업로드: inputStream,outputStream, cos.jar-MultipartRequest (0) 2021.07.25