Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Tags more
Archives
Today
Total
관리 메뉴

까마귀코딩.log

세션 이용하는방법 (Session) 본문

카테고리 없음

세션 이용하는방법 (Session)

까마귀코딩 2023. 2. 6. 19:09

세션이란 뭘까 ? 

 

세션은 클라이엍느 별로 서버에 저장되는 정보를 말한다 !

 

 

사용자컴퓨터에 저장되던 쿠키와 다르게 서버에 저장되기 때문에, 

비교적 보안이 필요한 데이터는 쿠키보다 세션에 저장한다. 

 

서버가 종료되거나 유효시간이 지나면 사라지는게 세션이다 !!!

 

 

 

세션을 이용하는 방법에 대해 알아보자 !

세션 이용 방법 ! 

 

1. 웹클라이언트가 WAS 에 요청 !

 

그러면 여기서 WAS가 하는일? 

 

2. 세션키를 생성해주고 

3. 세션키를 이용해서 저장소를 생성해주고

 

4. 세션키를 담은 쿠키를생성해준다. 

 

 

 

그다음 WAS 가 돌려주는것? 

5. 응답 !! 

 

웹 클라이언트에게 무엇을 돌려줄까? 

(세션키를 담은 쿠키 포함해서 돌려준다)

 

 

웹 클라이언트가 다시 

6)요청

을 WAS에 넣는다 

 

그 요청에는 세션키를 저장하고 있는 쿠키가 포함되어있다. 

 

WAS에서 하는일 ? 

 7) 쿠키의 세션키를 이용해서 이전에 생성한 저장소를 활용해준다. 

 

 

다시 정리해보자 !

 

웹 클라이언트가 서버에게 요청을 보내면?

서버는 클라이언트를 식별하는 세션아이디를 생성한다. 

 

서버는 session id로 key와 value를 저장하는

HttpSession을 생성하고,

session id 를 저장하고 있는 쿠키를 생성하여서 

클라이언트에게 전송한다. 

 

 

클라이언트는 서버측에 요청을 보낼때, 

session id 를 가지고 있는 쿠키를 전송한다.

 

서버는 쿠키의 session id 로 HttpSession을 찾는다. 

 

 

javax.servlet.http.HttpSession 으로 세션데이터를 다룰수 있다.

 

 

1.  세션 생성하고 얻기 !

 

 

HttpSession session = request.getSession();

HttpSession session = request.getSession(true);

 

request의 getSession()메서드는 서버에서 생성된 세션이 있다면??? 뭘 할까 ? 

 

있다면 세션을 반환하고,

 

없다면 새 세션을 생성하여 반환한다.

( 인수 default가 true )

 

생성된 세션이

새롭게 생성된 세션인지 알수 있는 방법은 ?

-->

HttpSession 의 isNew() 메서드로 알수있다. 

 

 

 

 

HttpSession session = request.getSession(false);

 

--> 위처럼

request의 getSession()메서드의 파라미터를 false로 전달하면 ??? 

 

== 

이미 생성된 세션이 있을때 뭐해 ?

 

그세션을 반환해

 

없으면 뭐해 ? null을 반환해 !

 

아~ 그러면 

HttpSession session = request.getSession(true);  랑

HttpSession session = request.getSession(false); 의 차이는

 

둘다 생성된 세션있을때 반환하지만 

없을때는 생성을 해서 반환하냐 아니냐의 차이이네 ~~

 

 

2.  세션에 값 저장하기 !

 

setAttribute(String name, Object value);

 

쎗 어트리뷰트로 값을 저장하는구나 ~!

 

name 과 value 쌍으로 객체 오브젝트를 저장하는 메서드이다. 

 

요거는 세션이 유지되는동안 저장되겠다 !!!

 

사용법 ?  

 

session.setAttribute( 이름, 값 );

 

이렇게 사용할수 있다. 

 

 

3.  세션에 값  조회하기 !

 

getAttribute(String name)

 

set으로 세션 저장하고

get으로 세션값 조회하는거네 !

 

 

getAttribute메서드로 세션에 저장된 값을 조회할수 있다

 

리턴타입은 object 이다 !!! 그래서 형변환이 필요하다 !

 

메서드 setAttribute 에 이용한 name 값을 알고 있으면 ?

다음과 같이 조회할수 있다. 

 

 

String value = ( String ) session.getAttribute("name");

 

 

 

4.  세션에 값  삭제하기 !

 

removeAttribute(String name)

 

removeAttribute 메서드로 name 값에 해당하는 세션정보를 삭제할수 있다.

 

invalidate() 로 모든 세션정보를 한번에 삭제할수 있다 !!!

 

 

 

5.  세션 유지시간 설정하기 !!

 

기본적으로 세션유지시간은 어케될까 ? ? ? ? ? ?  30분으로 유지된다 !!

 

세션 유지시간은 서버에 접속한 후 서버에 요청하지 않는 최대시간을 말한다 !

 

 

30 분이상 서버에 전혀 반응을 보이지 않으면 ? ?  

 

세션이 자동으로 끊어진다 !!

 

오호 ! 자동으로 끊어지는구나 ~

 

 

이 세션 유지시간은 어떻게 설정할수 있지 ?

 

web.xml 파일에서 설정할수 있다 !

 

<session-config>

   <session-timeout>30</session-timeout>

</session-config>

 

 

 

 

 

[ 스프링 mvc에서 session 사용방법 ]

 

스프링 mvc에서

 

@SessionAttribute와  @ModelAttribute 

요 두 애노테이션으로  세션에 값을 저장하고 가져오는 방법을 아래 예제들로 이해해보자 !!ㅎ

 

 

@SessionAttribute 파라미터로 지정된 이름과 같은 이름이 @ModelAttribute 에 지정되어 있으면 ? ?? ? 

 

 

@ModelAttribute 설정된 메서드가 반환되는 값을 그 세션에 저장한다. 

 

 

 

1) 컨트롤러 클래스 위에 @SessionAttribute를 선언하고, 

@ModelAttribute 는 메서드 위에 선언한다 

 

보면

컨트롤러 클래스에 @controller

@SessionAttribute("user") 요거 선언했네 요거 == SessionAttribute의 파라미터로 지정된 이름이 user 라는 뜻 

 

public class LoginController {

@ModelAttribute("user")   == ModelAttribute의 파라미터로 지정된 이름 역시 user이네 !!

 public User setUpUserForm() {

  return new User();  

  }

}

 

SessionAttribute 의 파라미터로 저장된 이름과 

ModelAttribute 의 파라미터로 저장된 이름이 같다 !!

 

둘의 이름이 같으므로 !?

 

setUpUserForm() 메소드가 리턴하는 User객체는 ?? 

user라는 이름의 세션에 저장된다 !

 

% 위 코드는 객체 를 반환하여 저장시키므로,

해당 세션값을 초기화하는 목적으로 사용할수 있다 !

 

 

2) @SessionAttribute 를 컨트롤러 클래스 위에 선언하고, 

메서드파라미터로 @ModelAttribute를 불러온다 ~

 

@Controller

@SessionAttribute("user")

public class LoginController {

 

@PostMapping("/dologin")

public String doLogin(@ModelAttribute("user") User user, Model model) {

 

   }

}

 

@SessionAttribute 의 이름과 @ModelAttribute의 이름이 같아 ~! @

클라이언트로 부터 전송받은 user값이 그 세션에 저장된다.

 

 

메소드에 @SessionAttribute 가 있을경우,

파라미터로 지정된 이름으로 등록된 세션정보를 읽어와 변수에 할당한다. 

 

@GetMapping("/info")

public String userInfo(@SessionAttribute("user") User user {

...

return "user";

 

sessionStatus 로 @SessionAttributes에 의해 저장된 오브젝트를 제거할수있다.

 

SessionStatus 는 컨트롤러 메서드의 파라미터로 사용할수 있는 스프링 내장 타입이다.

 

 

 

 

 

@Controller

@SessionAttributes ( "user") 

public class UserController {

@RequestMapping("value="/user/add", method=RequestMethod.POST)

public String submit(@ModelAttribute("user") User user, SessionStatus sessionStatus){

...

sessionStatus.setComplete();

...

}

}

 

SessionStatus 의 SetComplete()메서드로

user라는 이름의 세션값을 제거한다. 

 

Spring MVC 의 form tag 라이브러리 사용하기 

 

<form:form action="login" method="post" modelAttribute="user">

Email : <form:input path="email" /><br>

Password: <form:password path="password" /> <br>

<button type="submit">Login</button>

</form:form>

 

modelAttribute 속성으로 지정된 이름의 객체를 세션에서 읽어와,

form 태그로 설정된 태그에 값을 설정한다.