일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- play2 강좌
- 스칼라 동시성
- 주키퍼
- play 강좌
- 파이썬 머신러닝
- 안드로이드 웹뷰
- 파이썬
- 플레이프레임워크
- Actor
- 스위프트
- 스칼라
- 하이퍼레저 패브릭
- 파이썬 동시성
- Play2
- 엔터프라이즈 블록체인
- 스칼라 강좌
- akka 강좌
- Golang
- CORDA
- hyperledger fabric
- Adapter 패턴
- 블록체인
- Akka
- 그라파나
- 파이썬 강좌
- 이더리움
- 파이썬 데이터분석
- Hyperledger fabric gossip protocol
- 하이브리드앱
- Play2 로 웹 개발
- Today
- Total
HAMA 블로그
HTTP 세션을 이용한 인증 본문
http://hyeonstorage.tistory.com/125 펌
웹에서 세션(session)의 사용
1. 세션(session)의 개요
쿠키가 웹 브라우저에 사용자의 상태를 유지하기 위한 정보를 저장했다면, 세션(session)은 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.
세션은 사용자의 정보를 유지하기 위해 javax.servlet.http 패키지의 HttpSession 인터페이스를 구현해서 사용한다. 쿠키는 사용자의 상태 유지를 위한 정보를 웹 브라우저에 저장해서 웹 서버가 쿠키 정보를 읽어서 사용한다.
이것은 웹 브라우저에 저장된 쿠키는 웹 서버에서 열어볼 수 있다는 점에서 보안상 문제가 발생할 수 있다.
따라서 사용자의 정보를 유지하기 위해서는 쿠키를 사용하는 것보다 세션을 사용한 웹 브라우저와 웹 서버의 상태 유지가 훨씬 안정적이고, 보안상의 문제도 해결할 수 있다.
세션은 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장된다.
웹 서버는 각각의 웹 브라우저로부터 발생한 요청에 대해서 특별한 식별자를 부여한다. 이후에 이 식별자를 웹 브라우저에서 발생한 요청들과 비교해서 같은 식별인지를 구별하게 된다. 이 특별한 식별자에 특정한 값을 넣을 수 있으며, 이것을 사용해서 세션을 유지하게 된다.
2. 세션(Session) 메소드 리스트
메소드 이름 | 리턴 타입 | 설명 |
getAttribute(String name) | java.lang.Object | 세션 속성명이 name인 속성의 값을 Object 타입으로 리턴한다. 해당 되는 속성명이 없을 경우에는 null 값을 리턴한다. |
getAttributeNames() | java.util.Enumeration | 세션 속성의 이름들을 Enumeration 객체 타입으로 리턴한다. |
getCreationTime() | long | 1970년 1월 1일 0시 0초를 기준으로 하여 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴한다. |
getId() | java.lang.String | 세션에 할당된 고유 식별자를 String 타입으로 리턴한다. |
getMaxInactiveInterval() | int | 현재 생성된 세션을 유지하기 위해 설정된 세션 유지시간을 int형으로 리턴한다. |
invalidate() | void | 현재 생성된 세션을 무효화 시킨다. |
removeAttribute(String.name) | void | 세션 속성명이 name인 속성을 제거한다. |
setAttribute(String name, Object value) | void | 세션 속성명이 name인 속성에 속성값으로 value를 할당한다. |
setMaxInactiveInterval(int interval) | void | 세션을 유지하기 위한 세션 유지시간을 초 단위로 설정한다. |
3. 세션(Session)의 속성
- 세션의 속성 설정은 session 객체의 setAttribute() 메소드를 사용한다.
session.setAttribute("id", "value");
이때 주의할 사항은 세션의 속성 값은 객체 형태만 올 수 있다는 것이다.
session 객체는 웹 브라우저와 매핑되므로 해당 웹 브라우저를 닫지 않는 한 같은 창에서 열려진 페이지는 모두 같은 session 객체를 공유하게 된다. 따라서 session 객체의 setAttribute() 메소드를 사용해서 세션의 속성을 지정하게 되면 계속 상태를 유지하는 기능을 사용할 수 있게 된다.
- 세션의 속성을 사용하려면 session 객체의 getAttribute() 메소드를 사용한다.
String id = (String)session.getAttribute("id");
getAttribute() 메소드는 리턴 타입이 Object 타입이므로 사용 시 실제 할당된 객체 타입으로 형변환(casting)을 해야 한다.
- 세션의 속성을 삭제하려면 session 객체의 removeAttribute() 메소드를 사용한다.
session.removeAttribute("id");
- 세션의 모든 속성을 삭제할 때는 session 객체의 invalidate() 메소드를 사용한다.
session.invalidate();
4. 세션(Session) 사용 예제
- 세션(Session) 설정 (로그인 성공시에 로그인 아이디를 세션에 저장한다.)
<%@ page language ="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<% request.setCharacterEncoding("euc-kr");%>
<%
String id = request.getParameter("id"); // request에서 id 파라미터를 가져온다
String passwd = request.getparameter("passwd"); // request에서 passwd 파라미터를 가져온다.
--- 로그인 처리 ... 로그인 성공시 check 는 TRUE --
if(check){ // 로그인 성공시
session.setAttribute("id", id); // 세션에 "id" 이름으로 id 등록
response.sendRedirect("main.jsp"); // 로그인 성공 메인페이지 이동
}else{%> // 로그인 실패
<script>
alert("로그인 실패");
history.go(-1); // 이전 페이지로 이동
</script>
<%}%>
- 세션(Session) 가져오기 (세션에서 아이디를 가져와 로그인 상태를 인증하고, 값이 없을 경우 로그인 페이지로 넘긴다.)
<%@ page language ="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<% request.setCharacterEncoding("euc-kr");%>
<%
String id = "";
try{
id = (String)session.getAttribute("id"); // request에서 id 파라미터를 가져온다
if(id==null||id.equals(""){ // id가 Null 이거나 없을 경우
response.sendRedirect("loginform.jsp"); // 로그인 페이지로 리다이렉트 한다.
}
<%}%>
- 세션(Session) 제거하기 (로그아웃 시 현재의 세션 정보를 제거한다.)
<%@ page language ="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<% session.invalidate(); %> // 세션 정보 제거
<script>
alert("로그아웃 되었습니다.");
location.href="logout.jsp"; // 로그아웃 페이지로 이동
</script>
'보안' 카테고리의 다른 글
SSH 인사이드 (0) | 2016.06.09 |
---|---|
HTTP 다이제스트 엑세스인증 (0) | 2015.09.20 |
HTTP 기본인증 (Basic authentication) (0) | 2015.09.20 |
HTTPS 설정 및 사설인증서 관련 글들 (0) | 2015.06.04 |
자바와 보안을 알기위한 스터디 (0) | 2015.04.27 |