세션 사용하기

 

<? 
session_start()
?>

 

세션을 사용하기를 원하는 페이지에는 무조건 맨위에 sessioin_start()를 작성해야 한다. 이렇게 세션함수를 호출하면 유저의 시스템에 이전에 발급된 유효 세션이 있는지 확인하게 되고, 검사결과 이전값이 없다면, 새로 세션아이디를 생성하고 이전에 발급한 아이디가 있고, 유효하다면, 서버에 저장한 데이터를 그대로 사용하게 된다.

 

이때, 알아두어야 할 점은 사용하고자하는 스크립트 최상단에 호출해주어야 한다는 것이다. 이 함수를 호출하기 전에는 어떤한 함수의 실행결과나 html코드도 먼저 브라우저에 전송되어서는 안된다는얘기죠. 왜냐하면 이 함수는 사용자의 시스템에 세션 아이디를 쿠키(Cookie) 형태로 발급해주기 때문이다. 만약 이 함수를 호출하기 전에 다른 태그를 사용할경우 에러 메세지가 나올 것이다.


 

세션이 제대로 동작을 안할 때

 

  1. 웹 브라우저의 메뉴에서 도구/인터넷옵션/보안/기본수준이 높음 인경우
  2. 웹 브라우저의 메뉴에서 도구/인터넷옵션/개인정보에서 설정이 모든 쿠키 차단 인경우

 

세션 변수 등록하기

 

세션 등록을 위한 두 가지 방법을 소개한다. 첫번째 방법은 오래된 예전 방식이며 두번째 방법은 나중에 사용된 방법이다. 두 방법의 가장 큰 차이는 register_globals가 off 인상태에서는 첫번째 방법이 제대로 실행 안될 수도 있다는 것이다. 하지만 두번째 방법으로 사용하면, register_globals 가 on이나 off인 상태에서도 사이트가 잘 돌아간다.

 

방법 1)

session_start()
$name="joker";
$id="joker_id";
session_register("name");
session_register("id");

 

방법 2)

session_start()
$_SESSION["name"]="joker";
$_SESSION["id"]="joker_id";

 

※ register_globals = off 일때, 구형을 사용하면 나타나는 에러
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

 

※ session_register 보다는 $_SESSION['id']="값"; 을 사용하는 것을 추천한다.

session_register는 에러 리포팅을 강화시켜놓으면, waring 메시지가 뜨지만, $_SESSION[]을 이용하면 waring 메시지가 뜨지 않는다.

 

 

세션 변수 삭제하기

 

session_unset();
session_unset("joker");

 

session_unset 함수에 인자를 입력안하고 사용하면 전체 세션변수가 소멸된다.

session_unset 함수에 인자를 넣어 특정한 세션변수를 넣으면 해당 세션변수만 소멸된다.

(그런데, session_unset 함수를 사용해서 특정 세션변수만 소멸을 해도 이상하게 전체가 소멸되는 버그가 있는거 같다. 이때는 session_unregister 함수를 이용하면 개별적으로 세션변수 소멸이 가능하다.)

 

※ session_unset, sesseion_unregister, session_destory 차이

session_unset()는 변수의 값을 삭제하고 변수도 소멸시키는 함수이고, session_unregister()는 변수는 그대로 두고 변수값만 지운다는 것이다. session_destroy()는 현재 모든 세션의 변수값을 없애고 변수도 소멸시킨다. session_destroy()보다는 session_unset()과 session_unregister()를 사용하고, session_unregister()보다는 session_unset()을 사용하는 것이 좋다. session_destroy()을 사용하면 해당 페이지에서는 새로 세션을 생성할수 없다.

 

※ session_is_registered

session_is_registered()는 세션 변수가 현재의 세션에 등록되어 있는지를 조사하는 함수이다. session_is_registered("a") 처럼 변수 이름을 인자로 넣어서 사용하면 된다.