PHP & Others

쿠키와 세션 개념잡기.

페이지 정보

본문

*-------------------------------------------------------------------------------*
*    주저리~주저리 아무렇게나 풀어본 쿠키(cookie)와 세션(session) 파헤치기    *
*-------------------------------------------------------------------------------*

이 글은 절대 쿠키,세션에 대해 개념조차 없는 웉트라급 초보자를 위한 글이니까
'쿠키'또는 '세션'이라는 말을 한 번이라도 들어본 사람은 그냥 나가주세요.
제과점에서 쿠키 사먹어본 사람도 -> 나가주십셔.

( 혹시 이 글 제대로 썼나 감시하려는 사람도 그냥 나가주세요 - - + )

글이 재미 없거나 이해되지 않는 부분이 있더라도.. 가 아니구 당근 재미없구 이해가 안되겠지만
억지로라도 읽다보면 이해가 될 수도 있으니
당신이 정말 초보라면... 포기하지 말구 글쓴이의 의도를 잘 파악하면서 읽어주세요.

아래 글 중 설명을 위해 가계주인 과 손님들이 나옵니다.

가계주인 : 서버(server) 또는 호스팅컴퓨터.
손님x : 클라이언트 또는 사용자 또는 주인에 접속되는 단말기.


* 쿠키(cookie)란 무엇인가?

어떤 사람이 과일가계(서버:쇼핑몰홈페이지)를 차렸습니다.
이제 손님(접속자)오기만을 기다립니다.

왜 아래 내용처럼 장사를 하는지 본인도 알수 없지만..
설명을 위해 억지로 내용을 잡았습니다.
아마도 가계주인이 머리가 나쁘거나 사람을 못알아보는? 사람일 수도..

-------------------------------------------------------------------------

갑자기 손님들이 때로 몰려와서 물건을 사..진 않고 예약만 합니다.

손님1 : 가계분위기가 머 이래요?
주인 : -.- ( 물건이나 사! )

손님1 : 음... 저거 귤이죠? 저거 1 박스를...
주인 : 아, 저건 귤이 아니궁 오렌쥐~ 입니다. 귤보단 맛있지만 좀 비싸죠 ^^
주인 : 포장 해드릴까요?

손님1 : .. 다 먹으면 배 터지죠?

주인 : -.-

손님1 : 지금은 돈이 없구 나중에 사려고 하는데요, 다른사람에게 팔지 마세요?
주인 : 아.. 알겠습니다. ^^;;

손님2 : 어머~ 저 배 참 실하게 생겼네.. 아저씨 전 저거 2박스 , 내일 사러오께요
손님3 : 고등어 3마리두 예약 되요?
손님4 : 에이~ 우선 참외3개 주시고 사과 10개 예약이요.

주인 :  손님1은 오렌지,,, 손님2는 배2박스 내일까지.. 손님3은 고등어...아구 복잡해라

( 이때 주인이 손님들것을 외우기 싫어서 꾀를 부립니다. )

주인 : 여러분~~ 각자 메모장을 준비하셔서 그곳에 살 것을 적으세요!

주인 : 이번주까지 물건은 다 준비할테니 나중에 다시 오셔서 그 때 알려주시기 바랍니다.!!

손님들이 서로 자기 주머니에서 메모장을 꺼내 자기가 살 것을 적어둡니다.



몇일 후에 어떤 손님이 왔습니다.

주인 : 음,, 손님 주머니에 있는 메모장에 뭐라고 써있나요?
손님xx : 예.. 맛동산 10개라고 적혀있네요....

주인 : 아, 여기있습니다 맛동산 10 개.
주인 : 물건을 받으셨으니까 메모를 지우세요..

* 위 처럼 어느 특정 정보를 서버(주인)에서 관리하지 않고 클라이언트에게 정보관리를 시키는 것을 쿠키라 합니다.
쿠키를 구웠다는 표현은 클라이언트에 정보를 저장시켰다.. 라는 뜻이 됩니다.


-------------------------------------------------------------------------


* 세션(session)이란 무엇인가?


만약 어떤 손님이 왔는 데...

주인 : 뭘드릴깝셔?
손님x : 이상해요 메모에 분명 사과를 적은것 같은데... 지금 보니 동태3마리 라고 적혀있네요...
주인 : 누가 메모내용을 고쳤군요! 저런...
손님x : 에구 내 메모를 누가 보는것두 기분나쁘고 내용고친것두 기분나뻐요..

주인은 또 생각한다 아... 손님들이 메모관리를 잘 못할 수 있구나.. 내가 관리해야지..
그 후로 주인이 직접 메모내용을 관리하려고 합니다.


손님들이 또다시 왔습니다.

주인 : 앞으로 번호를 발급해 드릴테니 메모에 번호만 적으세요..

주인 : 자자~~ 번호 발급 받으셨나요?
주인 : 안받으신 분들은 여기서 번호를 발급해 드릴테니 손님 메모지에 번호만 적으세요

(들어오는 손님에게 모두 번호를 발급해줍니다. )
(손님들은 메모에 자기의 번호만 적습니다.,)
(이 후 주인은 해당 번호에 손님들의 주문을 꼬박 꼬박 적습니다. )

손님1 : 배 2박스,,
주인 : 번호 1번은 배 2박스..
손님2 : 참치 3마리, 마른오징어 3 마리,,
주인 : 번호 2번은 참치 3,, 오징어 3...
손님3 : 딸기 반쪽.
주인 : 번호 3번은 딸기 반쪽... ?? ( 망할.. 인건비두 안나오네.. -- )


몇일 후 손님이 왔다.

주인 : 자자~~ 번호 발급 받으셨나요?
손님 : 번호 먼저 받았는데요?
주인 : 손님은 몇번이셔요?
손님 : 여기... 번호 3번이라구 적힌 메모가 내주머니에 있네요..
주인 : 아 그렇군요.., 어디 가계 메모장에 번호 3번에 .,, 컥, 딸기 반쪽 --;; ( 그손님이였군,, )


* 위 처럼 어느 특정 정보하나만(번호:SESSION_ID) 클라이언트에게 정보관리를 시키고
그에 관련된 나머지 모든 정보를 서버에거 관리하는 방법이 세션(session)입니다.

-------------------------------------------------------------------------

* 쿠키에 대한 고찰.

- 냉 무 .. 고찰해본 적 없음.. -


* 세션에 대한 고찰.


PHP.INI에 설정된 세션디렉토리를 /tmp 라고 가정.( 일반적으로 /tmp 디렉토리임)

session_start(); 이 함수가 호출되면, 세가지 일이 발생하게 된다.
첫째는 클라이언트에 cookie형태로 SESSION_ID가 없다면 새로 쿠키를 굽는 일이고,
둘째는 서버에서 /tmp 디렉토리에 SESSION_ID와 같은 이름으로 파일이 존재하지 않다면 새로 만드는 일을..
세째는 해당 파일을 읽어들여 PHP내에서 곧바로 사용할 수 있도록 변수화 시키는 일.
( 아마도 ${"세션이름"} = 내용; 이런 작업인 듯 하다.. )

SESSION_ID란? 서버에 접속하는 모든 접속에 대해 유일하게 발급되는 번호표? 이다.

SESSION_ID는 4dcc2be3660505e60a1535491e62037a 식으로 되어있으므로
/tmp 디렉토리에 파일 이름도 sess_4dcc2be3660505e60a1535491e62037a 가 되며, 택스트 파일이다.


$사야할물건 = "맛동산 10 개";
session_register("사야할물건");

이 함수가 호출되면 SESSION_ID에 해당하는 파일(sess_4dcc2be3660505e60a1535491e62037a)을 오픈시켜
"사야할물건:s:47:맛동산10개" 식의 구체적인 내용을 기록하게 된다.

PHP내에서 매 번의 session_start() 함수 호출때 마다 파일의 내용을 읽어 변수화 시켜주어
해당 내용을 모두 사용할 수 있도록 하여준다.

페이지 내에서 세션을 사용하기 위해 제일 처음에 항상 session_start()를 해주어야 하며,
세션 사용후 session_destroy()함수로 세션을 닫으라고 되 있지만, 닫지 않아도
자동으로 닫힌다고 한다. ( 와~ 자동문이다! )

결국 세션과 쿠키는 밀접한 관계가 있으며, 쿠키의 구현원리는 클라이언트에 모두 의존하는 것이고
세션은 클라이언트에 SESSION_ID만 쿠키로 구운 후 나머지 내용은 서버에서 모두 구현하는 것이다.

왜? 세션을 써야 하는가?

그건 당연하다. 쿠키,세션 모든 내용이 택스트내용이기때문에 제 3의 누군가가 내용을 볼 수 있기때문이다.
단지 내용을 누가 보아도 된다면 쿠키에 의존하는것이 서버부하도 적고 현명할 것이다.
하지만 대부분 쿠키, 또는 세션 사용목적이 로그인에 관련된 내용을 포함하기때문에
보안상 좋지 않다.
물론 세션도 안전한 것은 아니다.
SESSION_ID만 파싱할 수 있다면 서버에서는 SESSION_ID에 해당하는 정보를 속수무책으로 토해낼 것이기 때문이다.

이 글이 도움이되셨나요?
머리속에는 뭔가 많은데 글로 쓸려니까 어수선하구 정리가 안되네요.
존대말하다가 반말하다가 해서 죄송...
전부 존대루 고칠려고하니까 귀찮아서 그냥 마무리 합니다. (__)



관련자료

등록된 댓글이 없습니다.
Today's proverb
유쾌한 사람은 자기 일에만 몰두하는 사람이 아니다. 때론 자신의 일을 전부 제쳐놓고 타인의 문제에 전력을 쏟는 열정이 있는 사람이다. 타인에게 자신의 힘을 나누어주고 마음을 열어주는 것은 자신의 삶을 행복하게 만드는 방법이다.