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에서 도입되었다. |
'IT 실무 > 웹프로그래밍' 카테고리의 다른 글
[API] js파일에 get방식으로 파라미터 넘기기 (0) | 2013.10.27 |
---|---|
jQuery에서 ajax 간단히 구현하기 ($.get과 $.post) (0) | 2013.10.26 |
[CSS] 요소 내에서 초과되는 문자열 "..." 으로 자르기 (0) | 2013.08.10 |
HTML + PHP 환경의 무료 POS 오픈소스 프로그램 (0) | 2013.07.29 |
Stable 버전과 Legacy 버전의 차이 (2) | 2013.07.14 |
댓글