본문 바로가기
IT 실무/웹프로그래밍

세션 관련 함수 정리

by 지식id 2013. 8. 16.
반응형

PHP4 이하 버전과 PHP5 이상 버전의 함수가 다르기 때문에 그 차이를 알고 있어야 정확한 세션 구현이 가능하다.

구형 함수를 사용 할 경우 어떤 서버에서는 아무 이상 없이 잘 동작 하지만, 어떤 서버에서는 경고가 출려되고 어떤 서버에서는 아예 에러를 출력하며 죽어버린다.

 

PHP4부터 PHP5까지 점진적으로 사용이 중단되었기 때문인데 그 경계선은 확실히 모르겠다. 다만 그냥 최신 버전의 함수가 무엇인지 알고 그 방식 대로만 사용하면 된다.

 

세션의 시작

session_start();

 

세션과 관련된 함수를 사용할때 항상 먼저 사용되어야 하는 함수이다. "난 이 페이지 내에서 세션을 사용하겠다" 라고 이해하면 된다. 이 함수가 호출되기 이전에 어떤 형태의 출력문도 있으면 안된다. 세션을 구동 시키는건 헤더에 포함이 되어야 되는 내용인데 헤더에는 출력문이 포함 될 수 없으므로 출력문이 보이면 그 전까지 내용으로 헤더를 끊어버리기 때문이다. header already sent... 라는 식의 에러가 보이면 이런 헤더 수준의 함수 위치를 잘 살펴 볼 필요가 있다. 그래서 이 함수는 주로 head나 lib파일 같이 고정적으로 include 되는 파일에 포함되어 있다.

 

세션 등록

$_SESSION['name'] = value;

 

이 함수가 최신 버전의 사용법이다. 그냥 등록하고 싶은 세션의 이름을 환경변수 배열 형태로 값을 정해주면 끝이다. 예전에 변수가 값을 할당하고 그 값을 세션에 등록시키는 방식보다 훨씬 쓰기 편하다.

 

session_register(); 는 구버전의 함수로 사용 해서는 안된다.

 

세션 사용

$_SESSION['name']

 

등록하는 방식과 똑같이 사용하면 된다. 그냥 배열에 들어간 변수 형태로 생각하면 될 것이다.

 

세션의 삭제

unset($_SESSION['name']);

 

최신버전에서 두루두루 사용되는 unset 함수를 이용한다. 세션도 따지고 보면 $_SESSION 이라는 배열에 저장되는 형태이므로 배열의 값을 없애는 unset함수를 이용한다. 간단하게 아무것도 없는 값을 넣고 싶으면

 

$_SESSION['name']="";

 

와 같이 사용해도 된다. 어짜피 세션이 있고 없고를 따질 때 if($_SESSION['name']) {} 과 같이 사용되기 때문에 실사용에서는 거의 같은 기능을 한다.

 

세션 비우기

session_unset();

 

세션 배열의 모든 값들을 비운다. 세션을 지우는 것은 아니고 그냥 모든 값들만 free시키는 것이다.

 

$_SESSION = array();

 

세션이 배열임을 이용하여 array() 함수를 통해 빈 배열을 할당시킴으로써 값을 지우는 방법도 있다. 위 두 방법은 거의 같은 효과를 낸다.

 

세션의 완전한 소멸

session_destroy();

 

모든 세션을 소멸시킨다. 세션의 값만 지우는 것이 아니라 세션 파일들까지 모두 지워버린다.

 

session_unset() vs session_destroy()

거의 비슷한 기능을 하는 함수이다. 어떨 때 어떤 함수를 써야 할까??

대부분의 세션은 시간이 지나면 자동으로 소멸된다. 하지만 여러 이유들에 의해서 찌꺼기처럼 남아있는 세션들 또한 많이 존재한다. 그런 세션들을 지울때 session_destroy() 함수를 사용한다. 그 외에 로그아웃 처리를 하거나 임시적으로 세션을 사용 할 때에는 대부분 개별적인 unset을 활용하는 경우가 많다.

그렇다면 session_unset() 함수는 언제 쓰이는 걸까? 거의 안쓰인다. 인터넷에 찾아보니 deprecated 되었다는 헛소문도 많이 보일 정도이다. 하지만 deprecated 될 정도로 쓸모 없는 함수는 아니다. 모든 회원을 로그아웃 처리 하거나, 곧 다시 등록될 세션의 값만 모두 지우고자 할 때는 세션 파일까지 모두 지우기 보단 값들만 비워 주는게 좋을 때도 있다.

 

세션 관련 설정

 

 옵션이름

 기본값

효과 

 session.auto_start

 0 (disabled) 

 자동으로 세션을 시작한다.  

 

 session.cache_expire

 180 

 세션은 사용자의 활동이 없느면 일정 시간 후 끊어진다. 이 시간을 설정해 준 다. 

 session.cookie_domain

 none 

 호스트 이름을 다은 도메인 체계에서도 세션 변수를 공유하여 하용할 수 있다. 

 session.cookie_lifetime

 0 

 세션ID에 대한 쿠키가 사용자의 컴퓨터에 얼마나 오래 남아 있는지를 설정한다. 기본값이 0이라는 것은, 즉 브라우저가 닫히면 쿠키가 사라진다는 뜻이다. 

 session.cookie_path

 / 

 세션 쿠키가 설정되는 경로  

 

 sessin.name

 PHPSESSION 

 사용자의 시스템에서 쿠키 이름으로 사용되는 세션의 이름 

 

 session.save_handler

 files

 세션 데이터가 저장되는 장소, 데이터베이스를 지정할 수도 있지만, 그렇게 하기 위해서는 추가적인 함수가 필요하다. 

 session.save_path

 " " 

 세션 데이터가 저장되는 장소, 데이터베이스를 지정할 수도 있자만 그렇게 하기 위해서는 추가적인 함수가 필요하다. 

 session.use_cookies

 1 (enabled) 

 세션이 클라이언트측에 쿠키를 사용할지 정해준다.  

 session.cookie_secure

 0 (disabled)

 쿠키가 안전한 접속을 통해서만 전송되게 할 것인지를 결정한다. 

 

 session.hash_function

 0 (MD5)

 세션 ID를 생성할 때 사용할 해쉬 알고리즘을 정한다. 

 '0'은 MD5(128비트)를 의미하며 '1'은 SHA-1(160비트)를 의미한다, 

 이 구성 설정은 PHP 5에서 도입되었다. 

 

반응형

댓글