dbms_primeidc/extdbms/lib/Core/Http/Session.php
2025-04-28 11:35:40 +09:00

92 lines
2.1 KiB
PHP

<?php
namespace lib\Core\Http;
class Session extends Http
{
public function __construct()
{
parent::__construct();
$this->init();
$this->sweepFlash(); // flash 생명주기 관리
}
// 세션 시작
public function init(): void
{
if (session_status() === PHP_SESSION_NONE) {
if (!is_dir(APP_SESSION_PATH)) {
mkdir(APP_SESSION_PATH, APP_SESSION_PERMISSION, true);
}
session_save_path(APP_SESSION_PATH);
// session_start() 하기 전에 반드시 세션ID를 세팅해야 함
if (isset($_GET['PHPSESSID'])) {
session_id($_GET['PHPSESSID']);
}
session_start();
}
}
// 일반 세션 저장
public function set(string $key, $value): void
{
$_SESSION[$key] = $value;
}
// 일반 세션 가져오기
public function get(string $key): mixed
{
return $_SESSION[$key] ?? null;
}
// 일반 세션 제거
public function remove(string $key): void
{
unset($_SESSION[$key]);
}
// flash 메시지 저장 (다음 요청까지)
public function flash(string $key, $value): void
{
$_SESSION['_flash_new'][$key] = $value;
}
// flash 메시지 가져오기
public function getFlash(string $key): mixed
{
return $_SESSION['_flash_old'][$key] ?? null;
}
// flash 메시지 존재 여부
public function hasFlash(string $key): bool
{
return isset($_SESSION['_flash_old'][$key]);
}
// 입력값을 flash로 저장
public function flashInput(array $input): void
{
$_SESSION['_flash_new']['_old_input'] = $input;
}
// 이전 입력값 가져오기
public function old(string $key, $default = null): mixed
{
return $_SESSION['_flash_old']['_old_input'][$key] ?? $default;
}
// 모든 flash 제거 (사용 후 직접 호출할 경우)
public function clearFlash(): void
{
unset($_SESSION['_flash_new']);
unset($_SESSION['_flash_old']);
}
// 요청 시작 시 flash 생명주기 관리 (자동 호출)
private function sweepFlash(): void
{
$_SESSION['_flash_old'] = $_SESSION['_flash_new'] ?? [];
unset($_SESSION['_flash_new']);
}
}