세션 처리 session_set_save_handler
(PHP 4, PHP 5, PHP 7, PHP 8)
session_set_save_handler — 사용자 수준 세션 저장 함수 설정
설명
session_set_save_handler( callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc, callable $create_sid = ?, callable $validate_sid = ?, callable $update_timestamp = ? ): bool
다음 프로토타입을 등록할 수 있습니다.
session_set_save_handler(object $sessionhandler
, bool $register_shutdown
= true
): bool
session_set_save_handler()는 세션과 관련된 데이터를 저장하고 검색하는 데 사용되는 사용자 수준 세션 저장 함수를 설정합니다. 이것은 PHP 세션에서 제공하는 것과 다른 저장 메서드를 선호할 때 가장 유용합니다. 세션 데이터를 로컬 데이터베이스에 저장합니다.
매개변수
이 함수에는 두 개의 프로토타입이 있습니다.
sessionhandler
- 세션 핸들러로 등록할 SessionHandlerInterface 및 선택적으로 SessionIdInterface 및/또는 SessionUpdateTimestampHandlerInterface(예: SessionHandler)를 구현하는 클래스의 인스턴스입니다.
register_shutdown
- session_write_close()를 register_shutdown_function() 함수로 등록합니다.
또는
open
- 다음 서명이 있는 호출 가능:
open(string
$savePath
, string$sessionName
): bool열기 콜백은 클래스의 생성자처럼 작동하며 세션이 열릴 때 실행됩니다. session_start()로 세션이 자동 또는 수동으로 시작될 때 가장 먼저 실행되는 콜백 함수입니다. 반환 값은 성공하면
true
이고 실패하면false
입니다. close
- 다음 서명이 있는 호출 가능:
close(): bool
close
콜백은 클래스에서 소멸자처럼 작동하며 세션 쓰기 콜백이 호출된 후에 실행됩니다. session_write_close()가 호출될 때도 호출됩니다. 반환 값은 성공의 경우true
, 실패의 경우false
여야 합니다. read
- 다음 서명이 있는 호출 가능:
read(string
$sessionId
): stringread
콜백은 항상 세션 인코딩(직렬화된) 문자열을 반환하거나 읽을 데이터가 없는 경우 빈 문자열을 반환해야 합니다.이 콜백은 세션이 시작되거나 session_start()가 호출될 때 PHP에서 내부적으로 호출됩니다. 이 콜백이 호출되기 전에 PHP는
open
콜백을 호출합니다.이 콜백이 반환하는 값은 원래
write
콜백에 저장하기 위해 전달된 것과 정확히 동일한 직렬화된 형식이어야 합니다. 반환된 값은 PHP에 의해 자동으로 직렬화 해제되고 $_SESSION 슈퍼글로벌을 채우는 데 사용됩니다. 데이터가 serialize()와 비슷해 보이지만 session.serialize_handler ini 설정에 지정된 다른 형식입니다. write
- 다음 서명이 있는 호출 가능:
write(string
$sessionId
, string$data
): stringwrite
콜백은 세션을 저장하고 닫아야 할 때 호출됩니다. 이 콜백은 직렬화된 버전인 $_SESSION 슈퍼글로벌인 현재 세션 ID를 수신합니다. PHP에서 내부적으로 사용하는 직렬화 메서드는 session.serialize_handler ini 설정에 지정됩니다.이 콜백에 전달된 직렬화된 세션 데이터는 전달된 세션 ID에 대해 저장되어야 합니다. 이 데이터를 검색할 때
read
콜백은 원래write
콜백에 전달된 정확한 값을 반환해야 합니다.이 콜백은 PHP가 종료될 때 또는 session_write_close()가 호출될 때 명시적으로 호출됩니다. 이 함수를 실행한 후 PHP는 내부적으로
close
콜백을 실행합니다.메모: "write" 핸들러는 출력 스트림이 닫힐 때까지 실행되지 않습니다. 따라서 "write" 핸들러의 디버깅 문의 출력은 브라우저에서 절대 볼 수 없습니다. 디버깅 출력이 필요한 경우 디버그 출력을 대신 파일에 쓰는 것이 좋습니다.
destroy
- 다음 서명이 있는 호출 가능:
destroy(string
$sessionId
): bool이 콜백은 세션이 소멸 매개변수가 true로 설정된 session_destroy() 또는 session_regenerate_id()로 세션이 소멸될 때 실행됩니다. 반환 값은 성공의 경우
true
, 실패의 경우false
여야 합니다. gc
- 다음 서명이 있는 호출 가능:
gc(int
$lifetime
): bool가비지 수집기 콜백은 오래된 세션 데이터를 제거하기 위해 PHP에서 주기적으로 내부적으로 호출됩니다. 빈도는 session.gc_probability 및 session.gc_divisor에 의해 제어됩니다. 이 콜백에 전달되는 수명 값은 session.gc_maxlifetime에서 설정할 수 있습니다. 반환 값은 성공의 경우
true
, 실패의 경우false
여야 합니다. create_sid
- 다음 서명이 있는 호출 가능:
create_sid(): string
이 콜백은 새 세션 ID가 필요할 때 실행됩니다. 매개변수가 제공되지 않으며 반환 값은 핸들러의 유효한 세션 ID인 문자열이어야 합니다.
validate_sid
- 다음 서명이 있는 호출 가능:
validate_sid(string
$key
): bool이 콜백은 세션이 시작되고 세션 ID가 제공되고 session.use_strict_mode가 활성화될 때 실행됩니다.
key
는 유효성을 검사할 세션 ID입니다. 해당 ID를 가진 세션이 이미 존재하는 경우 세션 ID는 유효합니다. 반환 값은 성공의 경우true
, 실패의 경우false
여야 합니다. update_timestamp
- 다음 서명이 있는 호출 가능:
update_timestamp(string
$key
, string$val
): bool이 콜백은 세션이 업데이트될 때 실행됩니다.
key
는 세션 ID이고val
은 세션 데이터입니다. 반환 값은 성공의 경우true
, 실패의 경우false
여야 합니다.
반환 값
성공하면 true
를, 실패하면 false
를 반환합니다.
Examples
예제 #1 사용자 정의 세션 핸들러: SessionHandlerInterface 개요에서 전체 코드를 참조하십시오.
여기에서 호출을 보여줍니다. 전체 예제는 위에 링크된 SessionHandlerInterface 시놉시스에서 볼 수 있습니다.
session_set_save_handler()와 함께 OOP 프로토타입을 사용하고 함수의 매개변수 플래그를 사용하여 종료 함수를 등록합니다. 이것은 일반적으로 객체를 세션 저장 핸들러로 등록할 때 권장됩니다.
<?php
class MySessionHandler implements SessionHandlerInterface
{
// implement interfaces here
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// proceed to set and retrieve values by key from $_SESSION
메모
경고 write
및 close
처리기는 개체 소멸 후에 호출되므로 개체를 사용하거나 예외를 throw할 수 없습니다. 예외는 포착되지 않으며 예외 추적도 표시되지 않고 실행이 예기치 않게 중단되므로 예외를 포착할 수 없습니다. 그러나 객체 소멸자는 세션을 사용할 수 있습니다.
이 닭과 달걀 문제를 해결하기 위해 소멸자에서 session_write_close()를 호출하는 것이 가능하지만 가장 안정적인 방법은 위에서 설명한 대로 종료 함수를 등록하는 것입니다.
경고 스크립트 종료 시 세션이 닫히면 현재 작업 디렉토리가 일부 SAPI로 변경됩니다. session_write_close()를 사용하여 세션을 더 일찍 닫을 수 있습니다.
기타
- session.save_handler 구성 지시문
- session.serialize_handler 구성 지시문
- register_shutdown_function() - 종료 시 실행할 함수 등록
- session_register_shutdown() - 세션 종료 함수
- 전체 절차 참조 구현은 » save_handler.inc를 참조하세요.