88 lines
1.9 KiB
PHP
88 lines
1.9 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();
|
|
}
|
|
}
|
|
|
|
// 일반 세션 저장
|
|
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']);
|
|
}
|
|
}
|