일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- include액션태그
- char[] String 형변환
- sleep()메소드
- include지시자
- ID중복
- 리눅스셋팅
- ThreadGroup()
- Linux세팅
- StringReader
- 상관 서브 쿼리
- Daemon()
- first-child
- 스레드그룸
- MemoryStream
- include 지시자
- StringWriter
- isinterrupted()
- 리눅스세팅
- 아이디중복
- 메모리스트림
- 상관서브쿼리
- first-of-child
- Linux셋팅
- InputDialog
- 표현 언어
- interrupted()
- ObjectInputStream
- String char[] 형변환
- interrupt()
- 동기화
- Today
- Total
다연이네
[days07] 세션(Session) 본문
1. 세션(Session) - 상태관리
2. 쿠키와 다른 점은 서버 상태 관리 (쿠키는 클라이언트에서)
3. 인증 / 권한을 대부분 세션을 사용해서 처리
4. 웹 컨테이너는 기본적으로 하나의 웹브라우저마다 하나의 세션(저장공간)을 생성한다.
== WAS 컨테이너 == 톰캣 컨테이너
(서블릿 생성~소멸 모든 것 관리하는 공장)
서블릿은 언제 생성 ?
클라이언트 요청 -> 서블릿 생성
응답 <-
5. 세션 생성 (지시자에서 session="true" ) 기본 설정
<%@ page session="true" %>
6. 세션 처리 과정 이해
[ url ] -> 첫 요청 서버[캐비넷(세션)]
<- 열쇠/비밀번호 세션아이디 jsessionid 쿠키값 저장
jsessionid 쿠키 저장 [캐비넷(세션)]
7. 세션 종료(제거) 언제 ?
ㄱ. 더 이상 요청이 없으면 일정 시간(20분-정확하진 않음)이 지난 후엔 세션 제거
ㄴ. 강제 제거하는 메소드로 제거 가능 invalidate()
8. session 기본 객체 메소드
ㄱ. getId() : 세션id를 얻어오는 메소드
ㄴ. getCreationTime() : 세션이 생성된 시간을 얻어오는 메소드 (1970.1.1~시간, 단위:ms)
ㄷ. getLastAccessedTime() : 웹 브라우저가 가장 마지막에 세션에 접근한 시간
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
$(document).ready(function (){
});
</script>
</head>
<body>
<%
String pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = new Date();
date.setTime(session.getCreationTime());
%>
<h3>세션 정보 확인</h3>
세션ID: <%=session.getId() %><br>
세션 생성된 시간: <%=session.getCreationTime() %><br>
세션 생성된 시간: <%=sdf.format(date)%><br>
<%
date.setTime(session.getLastAccessedTime());
%>
세션 최근 접근 시간: <%=session.getLastAccessedTime() %><br>
세션 최근 접근 시간: <%=sdf.format(date) %><br>
</body>
</html>
세션의 유효 시간 설정(세션 타임 아웃)
세션 타임아웃을 설정하지 않으면 (명시적으로 invalidate() 제거하지 않으면)
계속 메모리에 남게되어 메모리 부족 현상이 발생한다. 그래서 반드시 세션 타임아웃을 지정해주어야 한다.
<%
//세션의 유효 시간 설정(세션 타임 아웃)
int interval = 60*20; //단위(초) ==20분
session.setMaxInactiveInterval(interval);
%>
또는 web.xml에 가서 설정
<!-- 단위(분) - 세션 타임 아웃을 web.xml에서 20분 설정하겠다 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
주의 점은 jsp 안의 스크립트릿 안에서 설장할 때 단위는 초 , web.xml에서 설정할 때 단위는 분이라는 것이다.
<body>
<%
//세션 [캐비넷==서버 저장공간]
//브라우저 마다 -> 첫 요청 -> [세션]
//클라이언트 : jsessionid 쿠키값 = 세션ID
//4가지 영역(Scope)
//request 값 저장
request.setAttribute("deptno", "10");
// 세션 값(data) 저장(쓰기)
//session.setAttribute(name, value);
session.setAttribute("empno", "7566");
session.setAttribute("ename", "SMITH");
%>
<!-- 세션에 저장된 값을 확인 -->
<a href="ex05_02.jsp">ex05_02.jsp</a><br>
<a href="ex05_03.jsp">ex05_03.jsp</a><br>
<!-- 서블릿에서 session 생성하는 방법 -->
<a href="/jspPro/ses">/jspPro/ses</a><br>
</body>
1번 클릭시
<body>
<%
String deptno = (String)request.getAttribute("deptno");
String empno = (String)session.getAttribute("empno");
String ename = (String)session.getAttribute("ename");
%>
<ul>
<li>deptno: <%=deptno %></li>
<li>empno: <%=empno %></li>
<li>ename: <%=ename %></li>
</ul>
</body>
request로 받은 값만 null이 뜨고 session으로 받은 값들은 잘 뜬다.
2번 클릭시
<body>
empno: <%=session.getAttribute("empno") %><br>
<!-- EL(표현 언어) -->
<!-- EL 세션 객체 : sessionScope -->
empno: ${sessionScope.empno } <br>
<!--
pageScope 에서 뒤진 후 requestScope에서 뒤진 후
sessionScope 뒤진 후 applicationScope 뒤짐 => 이름만 줘도 된다 -->
empno: ${empno } <br>
<a href="ex05_04.jsp">세션 강제 종료</a>
</body>
session 값을 불러오는 방법 3가지
- <%=session.getAttribute("empno")%>
- ${sessionScope.empno}
- ${empno}
pageScope -> requestScope -> sessionScope -> applicationScope 뒤짐=>이름만 줘도 4가지 Scope를 모두 뒤져 찾음
강제종료 클릭시
<%
//강제 종료 메소드 : invalidate()
//session 기본 객체를 제거하고 session 기본 객체에 저장된
//속성 목록도 함께 삭제하는 메소드
session.invalidate();
%>
강제종료!!
세션을 강제종료 한 뒤 뒤로가기를 눌러 다시 1번, 2번을 각각 클릭하면 값이 없다.
1번 클릭시 |
2번 클릭시 |
3번 클릭시 (빈페이지)
서블릿에서 session 생성하는 방법
package days07;
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;
/**
* Servlet implementation class SessionTest
*/
@WebServlet("/ses")
public class SessionTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SessionTest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//System.out.println("SessionTest.doGet()....");
//서블릿에서는 기본 객체가 없다 => 어떻게 세션 객체를 사용 ?
//[ 서블릿에서 session 객체를 사용하는 방법 ]
boolean create = false;
HttpSession session = request.getSession(create);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
[기억] - create 값 차이점
ㄱ. false
세션 객체가 존재하지 않을 경우에는 null을 반환
ㄴ. true
세션 객체가 존재하지 않을 경우에는 세션 객체를 새로 생성해서 반환
if(session!=null) {
} //이걸 true 주면 안먹는다
'JSP' 카테고리의 다른 글
[days07] EL(표현 언어) (0) | 2021.01.04 |
---|---|
[days07] 세션을 사용해서 로그인 처리(상태 관리)(회원/비회원/관리자) (0) | 2021.01.04 |
[days07] 커넥션 풀 (Connection Pool) (0) | 2021.01.04 |
[days07] 쿠키를 사용해 로그인 처리(상태관리)(회원/비회원/관리자) (0) | 2021.01.04 |
[days06] 쿠키 (쿠키수정 추가 필요) (0) | 2021.01.01 |