본문 바로가기

JAVA/JSP

JSP 내장객체 - Cookie, Session

반응형

** jsp 내장객체

: jsp문서 안에서 특별히 사용자가 객체를 생성하지 않고도 사용할 수 있는 객체

: jsp문서를 요구하면 서버가 내부적으로 서블릿 클래스를 생성한다.

그 서블릿이 서비스를 위해 동작은 메소드인

~~~service(){


}

매개변수와 지역변수들이 바로 jsp 내장 객체 들이다.


** jsp 내장객체의 종류

request

 : 서비스를 요청한 사용자의 정보를 싣고 있는 객체

사용자가 입력한 정보, 요청한 사용자의 ip주소 등의 정보를 가지고 있는 객체


String getParameter(String name) 

String [] getParameterValues(String name) 

String getRealPath(String path) 

String getRemoteAddr() : 요청한 사용자의 ip주소를 알려줌


void setAttribute(String name, Object value)

Object getAttribute(String name)


Cookie[] getCookies()

 : 요청한 클라이언트에 저장한 모든 쿠키들을 읽어오는 메소드


response 

 : 응답을 위한 객체


void addCookie(Cookie cookie)

 : 요청한 사용자의 브라우저에 쿠키를 저장하고자 할 때 사용하는 메소드

session 

application 

exception 


** Cookie에 대한 공부

http 프로토콜은 "무상태 서버" 입니다.

인터넷을 사용함에 있어 늘, 서버에 연결되어있는 것처럼 보이지만

사용자가 한번 서비스를 요청하면 거기에 따른 응답을 하고 종료되는 구조이다.

웹서비스를 제공하는 입장에서는 사용자의 현재의 상태를 유지하기 위한 기법이 필요하다.


** 상태유지 기법의 종류

Cookie : 사용자의 정보(현재상태)를 사용자의 하드디스크에 저장하는 방식

문자열만 가능 

사용자가 임의로 저장할 수도 있다.

중요한 정보라면 부적합하다.

사용빈도수가 낮아 내장객체가 제공되지 않는다.

Session : 사용자의 정보(현재상태)를 서버에 기록하는 방식

자바의 어떤 자료형이던지 가능 

중요한 정보에 적합하다.

쿠키보다 세션이 더 많이 사용되므로 내장객체가 제공된다.

session 유지기간은 브라우저를 닫기 전까지 유지된다.

즉 브라우저를 닫으면 파기된다.(논리적인 연결단위가 끊긴다)


하나의 브라우저당 세션id가 부여된다.

세션id는 쿠키로 기록이 된다.


** 상태유지를 위한 jsp 내장객체

: 값의 유효기간(범위)이 달라요


* 종류

pageContext : 현재 페이지에서만 유지

request : 이다음 문서까지만 유지

session : 브라우저 닫기 전까지 유지, 브라우저당 별도의 세션id가 부여

사용자(브라우저)마다 별도로 관리

application : 서버가 죽기 전까지 유지, 모든 브라우저가 공유하는 변수

모든사용자에게 공통으로 관리


** filter

: 모든 문서에 로그인 했는지 판별하기 위해서 

<%@ include file ="memberCheck.jsp"  %>

이와같은 지시자를 이용 할 수 있다.

하지만 모든 문서에 일일이 지시자를 쓰는 것도 번거롭기때문에 filter를 이용한다.


** 로그아웃 관련

: 논리적인 연결단위를 강제로 파기 해준다(세션을 강제로 파기 해준다)

 session.invalidate();

response.sendRedirect("login.jsp");


invalidate() 가 세션을 강제로 파기해주는 것임


** Cookie를 사용하는 방법

: 내장객체를 제공하지 않으므로 사용자가 직접 객체를 생성하여 

response.addCookie()를 통해 쿠키를 저장하고 

request.getCookie()를 통해 쿠키를 읽어온다.


* Class Cookie의 생성자

Cookie(String name, String value)

 : 쿠키로 저장할 수 있는 것은 String만 가능하다.


request를 통해 요청한 사용자의 쿠키를 읽어 올 수 있다.

그런 request를 통해 특정 쿠키만 읽어오는 메소드는 없고 

모든 쿠키를 읽어오는 메소드만 있다.


예제01


ex01

<%

Cookie c = new Cookie("tel","010-1234-5678");

response.addCookie(c);

%>

쿠키 기록했음<hr>


ex02

<%

Cookie[] cookies = request.getCookies();


for (Cookie c : cookies) {

if (c.getName().equals("tel")) {

out.println("송인욱의 전화번호는 : " + c.getValue());

}

}

%>


예제02

: 방문횟수 구하는 쿠키


<%

int visitCount = 1;

Cookie []cookies = request.getCookies();

for(Cookie c : cookies){

if(c.getName().equals("visitCount")){

visitCount = Integer.parseInt(c.getValue());

}

}

%>

<%=visitCount%>번째 방문입니다.

<%

visitCount++;

Cookie c = new Cookie("visitCount",visitCount+"");

response.addCookie(c);

%>


예제03

: 마지막 방문일자 구하기


<%

String last = "처음 방문입니다.";

Cookie []cookies = request.getCookies();


// 사용자가 쿠키를 날려버릴수도 있기때문에 조건에 null이 아니라면 for문 돌게 해줌

if(cookies != null){

for(Cookie c : cookies){

if(c.getName().equals("lastVisit")){

last = c.getValue();

}

}

}


Calendar today = Calendar.getInstance();

int year = today.get(Calendar.YEAR);

int month = today.get(Calendar.MONTH);

int date = today.get(Calendar.DAY_OF_MONTH);

int hour = today.get(Calendar.HOUR);

int minute = today.get(Calendar.MINUTE);

int second = today.get(Calendar.SECOND);


String value = year+"년"+(month+1)+"월"+date+"일"+hour+"시"+minute+"분"+second+"초";


Cookie c = new Cookie("lastVisit",value);

response.addCookie(c);

%>



** Session

: jps 내장객체로서 사용자의 상태를 유지시키기 위하여 사용한다.


request 제공처럼 session 이 제공된다.


** Session 사용방법

: request 와 동일


request에 값을 설정하는 메소드 void setAttribute(String name, Object o)

request에 설정된 값을 읽어오는 메소드 Object getAttribute(String name)


session 값을 설정하기 위하여 사용하는 메소드 void setAttribute(String name, Object value)

session에 설정된 값을 읽어오는 메소드 Object getAttribute(String name)


 


** Session 예제

: 로그인창에서 로그인을 해야 메인에 접속할 수 있는 예제

만약 로그인 없이 메인에 바로 들어갈 경우 로그인창으로 보내는 설정을 해둠


login.jsp

<h2>로그인</h2>

<hr>

<form action="loginOk.jsp" method="post">

아이디 : <input type="text" name="id"><br>

암호오 : <input type="password" name="pwd"><br>

<input type="submit" value="로그인">

</form>



loginOk.jsp

<%

String id = request.getParameter("id");

String pwd = request.getParameter("pwd");


if(id.equals("tiger") && pwd.equals("1234")){

// "지금부터 이사람은 로그인 한 사람입니다." 라고 표시할 세션값을 싣자.

session.setAttribute("id", id);


// 서비스할 문서 main.jsp로 보낸다. 응답을 달리한다.

response.sendRedirect("main.jsp");

}else{

// 아이디나 암호가 잘못되었으니 다시 로그인 login.jsp로 보낸다.

response.sendRedirect("login.jsp");

}

%>



main.jsp

<%

if(session.getAttribute("id")==null){

response.sendRedirect("login.jsp");

}

%>


<body bgcolor="hotpink">

<h3>한빛 교육센터에 오신것을 환영합니다</h3>

<hr>

<img src="coco.png">


** session 과 application 비교하며 알아보기

예제

: 크롬과 브라우저를 동시에 켜놓고 누적횟수 비교하기

<%

int a = 0;

int b = 0;


if(session.getAttribute("a") != null){

a = (Integer)session.getAttribute("a");

}


if(application.getAttribute("b") != null){

b = (Integer)application.getAttribute("b");

}


%>


session 변수 a : <%= a %> <br>

application 변수 b : <%= b %> <br>

<hr>


<%

a = a+1;

b = b+1;

session.setAttribute("a",a);

application.setAttribute("b",b );

%>

반응형