update : 2015.11.03
php.shukuma.com

검색:
 
 
사용자 단계 세션 저장 함수 설정

session_set_save_handler

(PHP 4, PHP 5)

session_set_save_handler사용자 단계 세션 저장 함수 설정

설명

bool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )

session_set_save_handler()는 세션에 할당된 데이터를 저장하고 복구하는데 사용하는 사용자 단계 세션 저장 함수를 설정합니다. PHP 세션에서 제공하지 않는 저장 방법을 사용할 때 유용합니다. 예. 세션 데이터를 로컬 데이터베이스에 저장.

인수

open

열기 함수, 클래스의 생성자처럼 작동하고 세션이 열릴 때 실행됩니다. 열기 함수는 두 인수를 받습니다. 첫번째는 저장 경로이고 두번째는 세션 이름입니다.

close

닫기 함수, 클래스의 소멸자처럼 작동하고 세션 연산이 끝났을 때 실행됩니다.

read

읽기 함수는 저장 핸들러가 정상적으로 작동하기 위해 항상 문자열 값을 반환해야 합니다. 읽을 데이터가 없으면 빈 문자열을 반환합니다. 다른 핸들러에서 오는 값은 논리 표현으로 변환하여 반환합니다. 성공시엔 TRUE, 실패시엔 FALSE입니다.

write

Note:

"쓰기" 핸들러는 출력 스트림이 닫힐 때까지 실행되지 않습니다. 그러므로, "쓰기" 핸들러에서 디버그 구문 출력은 브라우저에서 볼 수 없습니다. 디버그 출력이 필요하면, 디버그 출력을 파일로 쓰십시오.

destroy

파괴 핸들러, session_destroy()로 세션이 파괴될 때 실행되며, 세션 id를 인수로 받습니다.

gc

쓰레기 수거자, 세션 쓰레기 수거가 실행될 때 실행되며, 최대 세션 수명을 인수로 받습니다.

반환값

성공 시 TRUE를, 실패 시 FALSE를 반환합니다.

예제

Example #1 session_set_save_handler() 예제

다음 예제는 PHP 세션 기본 저장 핸들러 files와 유사한 파일 기반 세션 저장을 제공합니다. 이 예제는 좋아하는 PHP 지원 데이터베이스 엔진으로 데이터베이스 저장을 처리하도록 쉽게 확장할 수 있습니다.

<?php
function open($save_path$session_name)
{
  global 
$sess_save_path;

  
$sess_save_path $save_path;
  return(
true);
}

function 
close()
{
  return(
true);
}

function 
read($id)
{
  global 
$sess_save_path;

  
$sess_file "$sess_save_path/sess_$id";
  return (string) @
file_get_contents($sess_file);
}

function 
write($id$sess_data)
{
  global 
$sess_save_path;

  
$sess_file "$sess_save_path/sess_$id";
  if (
$fp = @fopen($sess_file"w")) {
    
$return fwrite($fp$sess_data);
    
fclose($fp);
    return 
$return;
  } else {
    return(
false);
  }

}

function 
destroy($id)
{
  global 
$sess_save_path;

  
$sess_file "$sess_save_path/sess_$id";
  return(@
unlink($sess_file));
}

function 
gc($maxlifetime)
{
  global 
$sess_save_path;

  foreach (
glob("$sess_save_path/sess_*") as $filename) {
    if (
filemtime($filename) + $maxlifetime time()) {
      @
unlink($filename);
    }
  }
  return 
true;
}

session_set_save_handler("open""close""read""write""destroy""gc");

session_start();

// proceed to use sessions normally

?>

주의

Warning

PHP 5.0.5부터 writeclose 핸들러는 객체 파괴가 완료된 후에 호출되므로, 객체를 사용하거나 예외를 던질 수 없습니다. 그러나 객체 소멸자는 세션을 사용할 수 있습니다.

이 닭과 달걀 문제를 해결하기 위해서 소멸자에서 session_write_close()를 호출할 수 있습니다.

Warning

몇몇 SAPI에서 스크립트 종료시에 세션이 닫히면 현재 작업 디렉토리가 변경됩니다. session_write_close()로 세션을 일찍 닫을 수 있습니다.

참고