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
마음을 평화롭게 가지라. 그러면 그대의 표정도 평화로워질 것이다.