<?php
require_once $_SERVER['DOCUMENT_ROOT']."/inc/db_info.php";
require_once $_SERVER['DOCUMENT_ROOT']."/inc/func/system_func.php";
// 세션 수명 (작성&갱신시 마다 시간 추가)
// $SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); // PHP 세션 수명 설정값
$SESS_LIFE = 6 * 60 * 60;
// DB 연결 (open)
function sess_open($save_path, $session_name){
global $DB_CONN, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS;
// DB 접속 확인
if(!($DB_CONN = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME))){
echo "CANNOT CONNECT DB : ".mysqli_error($DB_CONN);
exit;
}
// DB 선택 확인
if(!(mysqli_select_db($DB_CONN, $DB_NAME))){
echo "CANNOT SELECT DB : ".mysqli_error($DB_CONN);
exit;
}
return true;
}
// DB 닫기 (close)
function sess_close(){
return true;
}
// 세션 로드 (read)
function sess_read($key){
global $DB_CONN;
$returnVal = "";
// 세션이 살아있을 경우 로드
$sess_query = "SELECT value FROM session WHERE sesskey = '$key' AND expiry > ".time();
$sess_result = mysqli_query($DB_CONN, $sess_query);
if(list($value) = mysqli_fetch_row($sess_result)){
$returnVal = $value;
}
return $returnVal;
}
// 세션 작성 (write)
function sess_write($key, $value){
global $DB_CONN, $SESS_LIFE;
// IP값 변수에 로드
$ip = BaseFunc::getRealClientIp();
// 현재시간에 세션 지속시간 더하기 (세션 종료시간)
$expiry = time() + $SESS_LIFE;
$value = addslashes($value);
// 세션 존재 여부 확인
$sess_query = "SELECT * FROM session WHERE sesskey = '$key'";
$sess_result = mysqli_query($DB_CONN, $sess_query);
if($sess_result->num_rows > 0){
// 세션 존재시 업데이트
$sess_query = "UPDATE session SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > ".time();
$sess_result = mysqli_query($DB_CONN, $sess_query) or die("update write err");
}else{
// 세션 미존재시 추가
$sess_query = "INSERT INTO session (sesskey, ip, id, expiry, value) VALUES ('$key', '$ip', null, $expiry, '$value')";
$sess_result = mysqli_query($DB_CONN, $sess_query);
}
return $sess_result;
}
// 세션 삭제 (destroy)
function sess_destroy($key){
global $DB_CONN;
// 해당 세션 삭제
$sess_query = "DELETE FROM session WHERE sesskey = '".$key."'";
$sess_result = mysqli_query($DB_CONN, $sess_query) or die(false);
return true;
}
// 유통기한 지난 세션 정리 (gc)
function sess_gc($maxlifetime){
// $maxlifetime <- 세션 수명 PHP 서버 설정값
global $DB_CONN;
// 기간 지난 세션 삭제
$sess_query = "DELETE FROM session WHERE expiry < ".time();
$sess_result = mysqli_query($DB_CONN, $sess_query) or die(false);
return mysqli_affected_rows($DB_CONN);
}
// 세션 함수 등록
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
// 세션 시작
session_start([
// 'cookie_lifetime' => $SESS_LIFE,
'cookie_httponly' => true
]);
?>