ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PHP]세션(Session) 사용방법, 세션이란 무엇인가
    Web 2019. 6. 19. 11:57

    세션은 주로 보이지 않는 데이터를 활용할 때 쓰여집니다.

     

    로그인 정보를 기억하고 있다거나, 

     

    내가 어떤 행동을 해서 얻는 데이터가 있다거나,

     

    세션은 휘발성 데이터이므로 인터넷 창을 끄면 사라집니다. 이러한 세션이라는 기능은 여러가지 활용도가 높은 대신 보안적인 측면에서는 좀 더 생각하여 만들 필요성이 있습니다.

     

     

    세션(Session) 사용방법

     

    1) Session의 의미와 구현원리

    세션의 의미를 말씀드리면 어떤 유저가 어떤 특정 홈페이지를 접속하여 머물러 있는 시간이라고 말할 수 있다.

    좀 더 어렵게 설명을 하면, 웹서버는 서로 다른 유저로부터 서버 내에 있는 페이지를 요청이 들어올 경우에 각 유저의 컴퓨터에 유일무이한 식별키를 쿠키의 형태로 발급하여 해당 유저가 사용자의 정보 즉, 사용자의 로그인이나 기타 입력된 정보를 서버 내에 저장하여 유저가 다시 접속하였을 때 유저에게 발급한 식별키를 이용하여 서버쪽에 저장한 정보(세션값)를 가져옴으로 유저를 구별하는 원리로 구현된다.

     

    이에 반하여 쿠키는 유저나 회원들의 정보를 사용자의 시스템에 저장하고 세션은 유저의 데이터를 서버 쪽에 저장하여 유저의 시스템이 서버에 저장되어 있는 해당 사용자의 데이터를 찾아 가져올 수 있는 식별키만 저장하기 때문에 유저의 보안 정보가 밖으로 빠져나가는 것을 막을 수 있어 좀 더 안전하다고 할 수 있습니다.

     

    2) Session 다루기

    1. 세션 저장방법

     1-1 사용자의 데이터를 환경설정 파일(PHP.ini)에서 지정한 디렉토리에 파일로 저장하는 방식으로 가장 기본적인 방법이라고 할 수 있다. 예를 들어 유저의 시스템에 저장한 식별키가 "tjgngngngnwi2"이라면 서버 내 지정한 디렉토리에는 "sess_tjgngngngnwi2"라는 이름을 갖는 파일로 생성된다.

    따라서 식별키가 "tjgngngngnwi2"인 유저가 사이트에 접속했을 때 서버에서는 이 식별키에 해당하는 파일을 열어 해당사용자의 정보를 가져오게 된다

     

     1-2 서버의 파일이 아닌 서버의 메모리에 저장하는 방식

    특징으로 접속한 유저의 시스템에 식별키를 발급할 때 32개의 문자열로 이루어진 세션 아이디를 생성한다는 점이다.

    이 값은 유저의 시스템에 저장되며 유저가 서버에 접속했을 때 브라우저를 통해 서버에 자동 전송되므로 서버쪽에서 웹사이트에 접속해 있는 유저를 서로 구별할 수 있는 근거이다

     

     1-3 사용자가 직접 세션을 다루는 방식을 정의하는 방법으로 보통 이 방법을 이용하여 세션 데이터를 파일이나 메모리 혹은 데이타베이스에 저장하여 관리하는 방법이며 가장 많이 사용된다. 세 번째 방식의 특징은 이렇게 생성한 세션 아이디 값은 보통 쿠키 방식을 통해 사용자의 시스템에 저장한다는 점입니다. 따라서, 이때에는 쿠키가 아닌 다른 방식으로 웹서버에 사용자의 식별키를 전달 할 수 있는 방법을 사용해야 하며 이럴 경우 보통은 웹페이지 요청시에 세션값을 get, post방식을 통해 함께 전달해주는 방식을 사용한다.

     

     

    2. 세션 생성, 등록, 삭제 및 종료

     

    세션 시작 처리

    <?

    session_start()

    ?>

     

    이렇게 세션함수를 호출하면 유저의 시스템에 이전에 발급된 유효 세션이 있는지 확인하고, 검사결과 이전값이 없다면 새로 세션아이디를 생성하고 이전에 발급한 아이디가 있고, 유효하다면, 서버에 저장한 데이터를 그대로 사용하게 된다

    이때 세션아이디는 PHPSESSID라는 이름을 갖는 변수에 저장됩니다.

    예를 들어 세션 아이디 값이 "3dff4fdg4h43"이라면 쿠키 변수 $HTTP_COOKIE_VARS["PHPSESSID"]에 이 세션 아이디값이 저장되는 것입니다.

     

     

    세션 값 처리

    <?

    session_start()

    $_SESSION['VAR'] = "data";

    ?>

     

     

    세션등록은 $_SESSION['세션명']라는 함수를 사용합니다.

    세션 변수 삭제 방법 또한 간단합니다.

    위에 보시면 name이라는 변수로 세션을 등록하였습니다.

    마지막으로 세션을 종료하려면 session_destory();라는 함수를 쓰면 됩니다.

    세션을 종료한다는 의미는 현재의 세션과 관련된 모든 데이터를 삭제한다는 의미입니다. 즉 이 함수를 호출한 사용자의 세션에 등록되어 있는 모든 데이터를 완전히 삭제한다는 뜻입니다.

     

    사실 웹서버 측에서 본다면 유저가 언제 웹사이트를 떠났는지 즉 사용자의 세션이 언제 끝났는지 만약 회원일 때 로그아웃을 하지 않고 브라우저를 닫았을 때와 같이 그 시점을 알 수가 없습니다. 그래서 웹서버가 사용자의 세션을 무효화시킬지를 결정하는 방법을 알려드리겠습니다. php의 세션 설정 항목 중에 session.gc_maxlifetime 항목의 값을 수정해주는 방법입니다.

    보통은 1440초 즉 24분으로 되어있는데 이걸 줄여주는 방법이 있고,session.gc_probiblty란 항목 이것은 이렇게 더 이상 의미없는 세션데이터를 삭제하는 실행주기를 설정하는 항목으로 기본값은 1로 되어있지만, 1이라함은 1%를 의미합니다. 이 값을 늘려주시면 됩니다.

     

     

    session_destroy 현재의 세션을 종료시키는 함수

     

     

    여기서 유의해야 할 사항 몇 가지 입니다.

    php.ini파일에 보시면 session.save_path = /tmp 이라는 옵션이 있는데 이것은 리눅스나 유닉스에 해당하는

    디렉토리이므로, 윈도우라면 D:/tmp 이런식으로 수정해야 합니다.

    또한 변경하고 하는 디렉토리가 실제 존재해야 하며 디렉토리 권한은 반드시 777로 해주셔야 합니다.

    이런식으로 디렉토리를 변경할 경우에는 해당 세션과 관련된 데이터를 참조하는 모든 스크립트에

    session_save_path()함수를 호출해주셔야 합니다.

    마지막으로 세션을 시작하는 session_start()함수 전에 이 값을 호출해주셔야 합니다.

    댓글

Designed by Tistory.