본문으로 바로가기

Session 이란?

category Helloworld!/PHP 2013.07.10 21:53

전에 포스팅한 글 중에 PHP에서 사용하는 $_SESSION을 사용하는 방법에 대해 설명하다 세션의 개념을 간단하게 쓴적이 있다.

사실 그때는 세션이란게 이런거구나 라고 이해하고 이정도면 되겠지라는 생각으로 나름 간단명료하게 끄적여놨지만

어제 Session이 무엇인지 설명하라 했을때 횡설수설했었다.

실컷 혼나고 다시 한번 개념 정리를 한다.


우선 누구나 다 올릴 수 있고 어느 포스팅에도 있는 네이버가 말하는 세션의 정의.

①망 환경에서 사용자 간 또는 컴퓨터 간의 대화를 위한 논리적 연결. 

②프로세스들 사이에서 통신을 하기 위해 메시지 교환을 통해 서로를 인식한 이후부터 통신을 마칠 때까지의 기간.


난 한국사람인데도! 이건 한글인데도!

하얀건 종이요 검은건 글씨로다...

뭔말이니 뭔말이야 계속봐도 뭐래는거야!!!


다시 검색하니 한 까페에서 좋은 설명을 찾았다.


세션이란 일정 시간동안 같은 사용자(정확하게 브라우저를 말한다)로 부터 들어오는

일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이라고 한다.

또한 여기서 일정 시간이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점을 말하며

즉, 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 칭한다는 것.


덧붙여 세션에 대해 알아보다 쿠키와 비교하는 부분이 굉장히 많았는데,

쿠키를 간단하게 설명하자면 특정 웹 사이트를 방문 했을 때 만들어지는 정보를 담는 파일을 지칭하는것이 쿠키이며

쉽게 말해 상태정보를 유지하는 기술이라고 하는데


갑자기 쿠키에 대해 알고나니 세션이랑 헷갈리기 시작한다. 

둘다 웹 사이트 방문했을 때 뭐? 정보를 뭐? 


이쯤에서... 쿠키와 세션의 차이점은 무엇인가?


- 쿠키의 경우는 방문자의 정보를 방문자 컴퓨터의 메모리에 저장하는 것을 말한다

예를 들자면 ID나 비밀번호를 저장하거나 방문한 사이트를 저장하는데에 사용한다.

(IE 인터넷 옵션에서 검색 기록 삭제할때 임시 파일, 열어본 페이지 목록, 쿠키, 저장된 암호 및 웹 양식 정보 삭제라고 되어있지 아니한가)

- 세션은 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장을 하는것을 말한다.


즉, 위에서 네이버가 설명했듯이 

프로세스들 사이에서 통신을 하기 위해 메시지 교환을 통해 서로를 인식한 이후부터 통신을 마칠 때까지의 기간동안 서버에 잠시 방문자 정보를 저장한다는 것.


그래서 쿠키와 달리 세션은 사용자들의 로그인 정보에 대한 보안을 한층 업그레이드 할 수 있어 웹사이트에 방문하여 계속 접속을 유지할 때 이전의 접속 정보를 이용할 수 있는 방법으로 많이들 사용하는 것이다.


이건 또 다른 블로그에서 가져온 내용인데 우선 복사 붙여넣기하고 설명하도록 하겠다.



1. HTTP Session이란?

1) session이란 서버가 해당 서버(웹)로 접근(request)한 클라이언트(사용자)를 식별하는 방법

2) 서버(웹)는 접근한 클라이언트(사용자)에게 response-header field인 set-cookie 값으로 클라이언트 식별자인 session-id(임의의 긴 문자열)를 발행(응답)한다.

3) 서버로부터 발행(응답)된 session-id는 해당 서버(웹)와 클라이언트(브라우저) 메모리에 저장된다. 이때 클라이언트 메모리에 사용되는 cookie 타입은 세션 종료 시 같이 소멸되는 "Memory cookie"가 사용된다.

4) 서버로부터 발행된 session(데이터)을 통해 개인화(사용자)를 위한 데이터(userInfo 등..)로 활용할 수 있다.


2. HTTP Session 동작 순서

1) 클라이언트(사용자)가 서버로 접속(http 요청)을 시도한다.

2) 서버(웹)는 접근한 클라이언트의 request-header field인 cookie를 확인해 클라이언트가 해당 session-id를 보내왔는지 확인한다.

3) 만약 클라이언트로 부터 발송된 session-id가 없다면, 서버는 session-id를 생성해 클라이언트에게 response-header field인 set-cookie 값으로 session-id(임의의 긴 문자열)를 발행(응답)한다.


역시나 여러번 읽어봐도 모르겠고


전에 포스팅한곳에도 써놨지만 대략

방문자가 서버에 접속 시도 후 서버 접근한 클라이언트(방문자)가 seesion id를 보내왔는지 확인 했는데 없다면 서버는 session id를 생성하는 부분을

우리가 많이들 쓰고 있는 session_start()함수인듯 하다.


다른 블로그에서 세션을 등록하기 위해서는 가장먼저 세션을 초기화 하여 세션을 생성하고, 현재의 세션 아이디를 활성화시키기 위해 session_start 함수를 사용한다 했으니...


또한 세션을 등록할때  $_SESSION['변수명'] 이렇게 쓰며


위에 설명중 세션 종료시 같이 소멸된다라고 써있는데 물론 브라우저를 끄며서 종료된다는 개념이지만 우리는

unset($_SESSION['변수명']); 와 session_destory(); 이라는 걸 알고 있지요

(혹시나 하여 간단한 설명을 하자면 좌측은 세션 소멸과 우측은 세션 종료때 사용한다)


위에 설명은 대부분 다른 블로그에 잘 설명해놓은것을 내맘대로 섞어가며 내맘대로 정리한것이니깐 밑에 참고사이트로 한번 더 봐줬으면 한다.


- 참고 사이트 : 

[네이버 지식백과] 세션 [session] (용어해설)

http://cafe.naver.com/metroapp/113

http://mohwaproject.tistory.com/176

http://citylock.tistory.com/446


다음에 설명해 보라할때

사용자가 (여기서 사용자란 브라우저를 사용하고 있는 사용자; 클라이언트) 웹브라우저를 통해 서버에 접속했을 때부터 웹브라우저를 종료함으로써 서버 접속을 종료하는 기간을 말하며

그 동안에 session id라는 것을 생성하여 서버에 사용자의 정보를 저장하는 것을 말한다.

라고 하면 되려나...?


댓글을 달아 주세요

  1. 길가던사람 2016.03.07 03:22

    감사합니다 :)
    도움이 되었어요!! :D

  2. 행인2 2016.05.03 10:52

    잘 보고 갑니다!

  3. s 2016.05.23 09:33

    쉽게 설명해주셔서 잘보고 갑니다!

  4. 방랑자 2017.02.03 02:40

    이해하기 쉬운 좋은 설명입니다! 감사해요~

  5. SeungRi 2017.12.27 09:13

    감사합니다.
    혹시 개인 블로그에 비공개 글로 복사를하거나 공개글로 주소를 남겨놓아도 괜찮을까요 ?
    목적은 자주 살펴보며 까먹지 않기 위함입니다.

  6. 내머리속돌맹이 2018.04.01 20:24

    돌맹이에 새겨놓기 좋은 명쾌한 글이였어요.
    좋은 글 감사합니다.

    • shaking 2018.04.02 10:11

      돌맹이에 새겨놓기 좋은ㅋㅋㅋㅋㅋ 도움되셨다니 다행입니다

  7. 머리를 탁! 2018.08.02 15:27

    정말 딱 이해하기 쉽게 설명해주셨네요 . 감사합니다 ㅠㅠ 세션이 뭔지 이제 알겠어요ㅠㅠ

  8. ㅋㅆ 2019.07.31 11:14

    감사합니다 정말 다른블로그보다 명쾌하고 이해잘되는 설명이에요 저도 제 개인메모에 퍼갈게요 정말감사해요.