Files
edu/bbs/entry_moon.php
T

100 lines
3.2 KiB
PHP

<?php
/**
* /bbs/entry_moon.php
* 그누보드 기반 시스템 분기 및 세션 처리 페이지
*/
// 1. 그누보드 환경 설정 로드 (경로에 맞춰 수정 필요)
// 보통 그누보드 루트의 common.php를 불러오면 세션 시작 및 DB 연결이 포함됩니다.
include_once('./_common.php');
/**
* 만약 common.php를 쓰지 않고 별도 DB 연결을 사용한다면
* 아래와 같이 세션과 DB 연결을 직접 처리합니다.
*/
/*
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
require_once __DIR__ . '/db_conn.php';
$pdo = db_conn();
*/
// 2. POST 파라미터 체크
$member_id = isset($_POST['member_id']) ? trim((string)$_POST['member_id']) : '';
$sys_comp_code = isset($_POST['sys_comp_code']) ? trim((string)$_POST['sys_comp_code']) : '';
// 값이 없거나 널이면 로그인 페이지로 이동
if (!$member_id || !$sys_comp_code) {
header("Location: /skin/login.php");
exit;
}
try {
// 3. 사용자 조회 (Prepared Statement)
$sql = "SELECT member_id, sys_comp_code, name, rank_name, intro_flag
FROM edu_users
WHERE member_id = ? AND sys_comp_code = ?
LIMIT 1";
$stmt = $pdo->prepare($sql);
$stmt->execute([$member_id, $sys_comp_code]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// 결과값이 없으면 로그인 페이지로 이동
if (!$user) {
header("Location: /skin/login.php");
exit;
}
// 4. 변수 정리 및 세션 할당
$U_member_id = $user['member_id'];
$U_sys_comp_code = $user['sys_comp_code'];
$U_name = $user['name'];
$U_rank_name = $user['rank_name'];
$U_intro_flag = (int)$user['intro_flag'];
// 요청하신 세션 할당 규칙 적용
$_SESSION['user_id'] = $U_member_id;
$_SESSION['ss_mb_id'] = $U_member_id; // 그누보드 표준 세션 키
$_SESSION['sys_comp_code'] = $U_sys_comp_code; // 기획안에 따른 flag 할당
$_SESSION['company'] = $U_sys_comp_code; // 기획안에 따른 flag 할당
$_SESSION['member_name'] = $U_name;
$_SESSION['name'] = $U_name;
$_SESSION['rank_name'] = $U_rank_name;
$_SESSION['intro_flag'] = $U_intro_flag;
// 세션 보안을 위한 ID 재생성
session_regenerate_id(true);
// 5. 페이지 이동 분기
if ($U_intro_flag === 1) {
// 이미 읽음 상태면 메인으로
header("Location: /skin/index.php");
exit;
} else {
// 읽지 않음(0) 상태면 DB 업데이트 후 인트로로
$update_sql = "UPDATE edu_users
SET intro_flag = 1
WHERE member_id = ?
AND sys_comp_code = ?
AND intro_flag = 0";
$up_stmt = $pdo->prepare($update_sql);
$up_stmt->execute([$U_member_id, $U_sys_comp_code]);
// 업데이트 성공 여부와 상관없이(혹은 성공 직후) 세션 동기화 후 이동
$_SESSION['intro_flag'] = 1;
$_SESSION['sys_comp_code'] = 1;
$_SESSION['company'] = 1;
header("Location: /skin/intro.php");
exit;
}
} catch (PDOException $e) {
// 운영 환경에서는 에러 로그만 남기고 로그인 페이지로 보내는 것이 안전합니다.
error_log($e->getMessage());
header("Location: /skin/login.php");
exit;
}