세션이란
 클라이언트가 서버에 접속해 있는 상태를 말하는 것,
방문자가 웹브랑저를 열어 서버에 접속하고, 다시 웹프라우저를 닫아 서버와의 연결을 종료하는 하나의 단위를 세션이라 한다.

먼저 세션을 시작하면, 서버에서는 세션 아이디라는 것을 생성한다.
이는 클라이언트에게 각각의 유일한 세션 아이디를 부여하여클라이언트를 구분하는 기능을 한다.

그리고 부여한 세션아이디는 클라이언트의 쿠키에 저장된다.
기본적으로 PHPSESSID라는 쿠키로세션아이디가 저장되는데, 이 쿠키의 값으로 세션 아이디가 들어가는 것이다.
그리고 서버측에서는 세션을 저장하는 곳에 그 세션 아이디를 이름으로 갖는 파일을 하나 생성하며, 그 파일에 세션 아이디에 해당하는 클라이언트의 세션 정보가 저장되게 된다.


apm설치할때 수정하는 php.ini
을 보면 세션에 관한 내용이 있다.

[Session]
session.save_handler = files

session.save_path = "d:/temp" //세션이 저장될 경로
session.use_cookies = 1 //클라이언트의 쿠키로 세션 아이디를 저장함

session.name = PHPSESSID //세션아이디를 저장할 쿠키 이름

session.auto_start = 0 // 자동으로 세션을 시작함

session.cookie_lifetime = 0 // 세션아이디를 저장할 쿠키의 폐기시간

session.cookie_path = /   //세션 아이디를 저장할 쿠키 경로

session.cookie_domain =        //세션 아이디를 저장할 쿠키의 도메인


위의 설정을 setcookie함수로 정리해 보면 다음과 같다
setcookie ( "PHPSESSID", "세션아이디", 0, "/", "");



세션의 시작 session_start
세션을 사용하기 전에는 session_start함수를 호출하여, 세션이 시작되는 것을 알려주어야함. 주의할 것은 쿠키와 마찬가지로 세션은 헤더데이터이므로,
세션을 사용하기 전에 어떠한 출력이 있으면 안됨.
session_start();
세션스타트 함수를 호출하고 난다음에 세션을 사용할 수 있다.


세션의 등록 session_register
세션스타트 함수를 호출한 다음 세션을 등록해야 하는데,
쿠키에서의 setcookie의 기능과 비슷하지만 형식은 다르다
$변수명 = "값";
session_register (변수명);

세션을 등록하기 위해서는 일단 변수를 하나 만들고, 값을 넣어준 다음
session_register함수를 호출하고, 매개변수로 변수명을 넣어준다.
이때 변수명에서 $를 제외하고 넣어주어야 하며, 이렇게 되면 변수명에 해당하는 세션이 등록되고 , 그 세션의 값으로 변수의 값이 들어간다.

$변수명1 = "값1";
$변수명2 = "값2";
session_register (변수명1, 변수명2);
위와 같이 여러개를 한번에 세션으로 등록할 수도 있다.



<?
session_start();
$test="세션예제";
session_register(test);
?>

<?
echo $HTTP_COOKIE_VARS[PHPSESSID];
?>
결과 dcd93aff8941d6340285850ea58269c4
->세션아이디를 확인 할 수 있다. 이것은 곧 생성된 파일명앞에 sess_ 를 붙인것과 같다


<?
session_start();
echo $test;
?>
결과 세션예제
->세션의 값을 출력할 수 있다.

<?
session_start();
echo $HTTP_SESSION_VARS[test];
?>
위 위의 예제처럼 $test를 변수로 사용하면, 'index.php?test=값' rhk rkxdms
get방식의 접근에서 엉뚱한 값이 사용되는 경우가 있으므로
$test의 값이 아닌 $HTTP_SESSION_VARS라는 환경변수를 사용한다.




세션의 삭제 session_unregister
$변수명 = "";
session_unregister (변수명);

<?
session_start();
$test="";
session_unregister (test);
 ?>
이렇게 하고 난후
<?
session_start();
echo $HTTP_SESSION_VARS[test];
?>
위처럼하여 test의 세션값을 확인하려고 하면
아무값도 출력이 안되는 걸 알 수 있다. (세션을 삭제했기에)

세션은 삭제되었지만 세션파일이 그대로 남아있는 걸 알 수 있는데
그것은 세션이 폐기되지 않았기 때문이다.



세션의 폐기 session_destroy
-세션을 폐기한다는 것은 세션파일이 저장되는 경로에서 세션파일을 삭제한다는 것이다
클라이언트가 웹브라우저를 종료하여 세션을 종료하였다고 하더라도
서버의 입장에서는 세션이 종료되었는지 알 수 없으므로 이 세션 파일을 계속해서 남아있게 된다.
이때 강제적으로 세션파일들을 삭제하기 위해 session_destroy함수를 사용한다.

<?
session_start();
session_destroy();
?>
실행해보면 세션 파일이 삭제되는 것을 알 수 있다.


php.ini을 다시 보자

session.gc_probability = 1 //세션파일삭제작업을 몇%의 비율로 실행할 것인지를 결정
session.gc_maxlifetime = 1440 //지정된 시간(초)이 지난 세션은 삭제 대상으로 간주함

위 두가지 함수는 우리가 session_destroy함수로 일일이
세션 데이터를 삭제하지 않아도, 자동으로 데이터들을 삭제하도록 설정해주는 것으로
즉 위의 조건하에서는
1440초 (24분)이 지난 세션파일은 폐기 대상으로 간주하겠다는 것이고,
매번 세션을 시작할때, 전체의 1%의 비율로 폐기 작업을 실행한다는 것이다.

예를들어 비율이 1%이고, 세션 작업을 하는 페이지를 100번 실행한다고 하면
100번중 1번만 세션폐기 작업을 실행하게 되는 것이다.
물론 100으로 해주면 100번 모두 폐기 작업을 실행하지만
그만큼 서버의 부하는 늘어나게 된다.

 

+ Recent posts