PHP Web Prog.
세션의 정의에 대해서는 생략합니다.
1. 세션의 시작과 값의 등록
세션을 사용하기 위해서는 다음과 같이 최상단에 세션을 사용함을 명시해줘야 합니다.
<? session_start() ?>
그리고 세션에 값을 등록하기 위해서는 session_register 을 통해 값을 등록하게 되는데, php 4.2.3 이후버전(정확한지는 확인해봐야합니다. 근거는 오류메시지입니다.)에서는 $_session 을 사용합니다.
(1). $_session 을 이용한 방법
session_start();
$_session[test]="123";
echo "세션 테스트입니다. 저장된 값은 $_session[test] 입니다.";
?>
(2). session_register() 를 이용한 방법
session_start();
$test=12;
session_register(test);
echo "세션 테스트입니다. 저장된 값은 $test 입니다.";
?>
2번은 위와 같은 방법으로 써야 합니다. 값이 있는 변수를 선언한 후, 변수를 $가 없는 형태로 함수에 넣습니다.
그리고 값을 호출할때는 변수를 호출하는 방식으로 씁니다.
하지만 이방식으로 했을 때, 다음과 같은 메시지를 확인할 수 있습니다.
정확히 말하자면, session_register가 문제가 아니라 세션 데이터에 접근하는 방법인 $test에 문제가 있는 것이겠죠? 접근 방법을 1번의 방법처럼 $_session[test] 로 접근해보았는데, 세션 데이터값을 확인할 수 없는 것을 보면, session_register() 함수로 등록된 값 자체를 $test 이런식으로 접근을 하게 해놓은 것 같습니다. 아니면.. 말구요. ㅎㅎ제 소견입니다. 사실.. 같은 세션 데이터인데.. ㅋㅋ 이건 되고 저건 안되고 ... 궤변입니다. 패스~
GET, POST 도 이전에는 그런방식이었는데, 값을 얻어내는 방법이 달라진 것을 보면, 역시나 보안문제이겠죠? 다 같은 방법으로 접근하니까요.
2. 세션의 제거
세션 등록과 마찬가지로 session_unregister() 라는 세션을 삭제하기위한 함수가 존재하지만, unset 이라는 함수를 씁니다.
(1) unset 이용방법
<?
session_start();
$_session[test] = "1234";
echo "세션 테스트입니다. 저장된 값은 $_session[test] 입니다.";
echo "<br/>";
unset($_session[test]);
echo "세션 제거 테스트입니다. 저장된 값은 $_session[test] 입니다.";
?>
세션 제거 테스트입니다. 저장된 값은 입니다.
unset은 이런 용도로 사용가능하지만, 기본적으로 변수를 삭제하는 함수로 정의되어 있습니다.
(2)session_unregister()를 이용한 방법
<?
session_start();
$test=12;
session_register(test);
echo "세션 테스트입니다. 저장된 값은 $test 입니다.";
echo "<br/>";
session_unregister(test);
echo "세션 제거 테스트입니다. 저장된 값은 $_session[test] 입니다.";
?>
결과는 다음과 같습니다.
세션 테스트입니다. 저장된 값은 12 입니다.
세션 제거 테스트입니다. 저장된 값은 입니다.
일단 성공적으로 세션이 제거가 되었습니다. 세션값 테스트에서는 $_session[test] 를 이용하였는데요.
이는 $test 로 접근할 경우, 세션에 저장된 test의 값이 아닌 변수 test의 값을 불러오기 때문에,
위와같이 테스트를 진행하였습니다.
3. 세션의 폐기
위에서 세션을 제거하였다고 해도, 서버에는 세션파일이 존재하겠는데요.
마지막에 다음을 추가해서 세션파일을 삭제 할 수 있습니다.
로그아웃을 할 때, 쓰면 되겠군요.
하지만, 이렇게 직접 폐기하지 않아도, 세션을 PHP가 알아서 정리해주는데요.
이는 php.ini 파일을 열어보면 다음 두항목의 설정에 따라, 정리되겠습니다.
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.
session.gc_probability = 1
session.gc_divisor = 100
; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440
파란색이 설명부분입니다. 일종의 자바에서의 가비지 콜렉터이네요.
gc_probability 와 gc_divisor 의 비율에 따라서, 그러니까 여기서는 1/100 의 비율로 세션이 요청될때, 세션이 정리된다는 말이구요.
밑의 maxlifetime 은 유효시간이겠죠. 설명으로 보면 1440초(설정되어 있는)가 지난 데이터는 가비지(쓰레기)로 간주된다로 보면 되겠네요.
결론은, "유효시간이 지난 세션 데이터가 가비지로 간주되면, 새로운 세션이 시작될때마다, 1/100의 비율로 제거된다."로 해석할 수 있습니다. 결국 가비지로 간주된 세션데이터가 한꺼번에 제거되는 것이 아니라, 위의 설정된 비율로 제거된다고 이해가능하겠네요.
세션에 대해서는 이만 글을 줄이겠습니다.
'프로그래밍 > PHP' 카테고리의 다른 글
[PHP] MYSQL DB와 연결해보자 (2) | 2013.07.16 |
---|---|
[PHP] eval 함수에 대해서 알아보자. (0) | 2013.07.11 |
[PHP] 쿠키(Cookie)를 이용한 방문횟수를 체크해보자. (0) | 2013.07.10 |
[PHP] 쿠키(cookie)를 사용해 보자. (0) | 2013.07.10 |
[PHP] include, 다른페이지를 삽입해 보자. (0) | 2013.07.10 |