125 lines
3.5 KiB
PHP
125 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* 외부 인트라넷 → 배움터 진입 분기 페이지 (entry_new.php)
|
|
*
|
|
* 기존 세션 데이터를 초기화한 후 새로운 사용자 세션을 할당합니다.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
if (session_status() === PHP_SESSION_NONE) {
|
|
session_start();
|
|
}
|
|
|
|
// 1. 요청 방식 및 파라미터 검증
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
http_response_code(405);
|
|
exit('허용되지 않는 요청 방식입니다.');
|
|
}
|
|
|
|
$memberId = trim((string)($_POST['member_id'] ?? ''));
|
|
$sysCompCode = trim((string)($_POST['sys_comp_code'] ?? ''));
|
|
|
|
// 필수 값이 없으면 로그인 페이지로 이동
|
|
if ($memberId === '' || $sysCompCode === '') {
|
|
header("Location: /skin/login.php");
|
|
exit;
|
|
}
|
|
|
|
require_once __DIR__ . '/db_conn.php';
|
|
|
|
try {
|
|
$pdo = db_conn();
|
|
|
|
// 2. 사용자 조회 (member_id, sys_comp_code 기반)
|
|
$stmt = $pdo->prepare(
|
|
'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(
|
|
"
|
|
SELECT
|
|
u.member_id,
|
|
u.sys_comp_code,
|
|
u.name,
|
|
u.rank_name,
|
|
u.intro_flag,
|
|
|
|
ec.code,
|
|
ec.code_name as comp_name
|
|
|
|
FROM edu_users u
|
|
LEFT JOIN
|
|
(
|
|
SELECT code,code_name FROM edu_codes WHERE group_code = 'CO100'
|
|
) ec
|
|
ON ec.code = u.belong_comp
|
|
WHERE u.member_id = ? AND u.sys_comp_code = ?
|
|
LIMIT 1
|
|
"
|
|
);
|
|
|
|
$stmt->execute([$memberId, $sysCompCode]);
|
|
$user = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
// 사용자가 없으면 로그인 페이지로 이동
|
|
if (!$user) {
|
|
header("Location: /skin/login.php");
|
|
exit;
|
|
}
|
|
|
|
// --- [세션 초기화 단계] ---
|
|
// 새로운 사용자의 정보를 담기 전에 기존 세션 변수를 모두 제거합니다.
|
|
session_unset();
|
|
// 보안을 위해 세션 ID를 새로 발급합니다. (기존 세션 데이터 삭제 포함)
|
|
session_regenerate_id(true);
|
|
// -------------------------
|
|
|
|
// 3. 변수 정리 및 세션 저장 (요청하신 규칙 엄격 적용)
|
|
$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_comp_name = $user['comp_name'];
|
|
$U_intro_flag = (string)$user['intro_flag']; // '0' 또는 '1'
|
|
|
|
$_SESSION['user_id'] = $U_member_id;
|
|
$_SESSION['ss_mb_id'] = $U_member_id;
|
|
$_SESSION['comp_name'] = $U_comp_name;
|
|
$_SESSION['sys_comp_code'] = $U_sys_comp_code;
|
|
$_SESSION['company'] = $U_sys_comp_code;
|
|
|
|
$_SESSION['member_name'] = $U_name;
|
|
$_SESSION['name'] = $U_name;
|
|
$_SESSION['rank_name'] = $U_rank_name;
|
|
$_SESSION['intro_flag'] = $U_intro_flag;
|
|
|
|
// 4. 리다이렉트 분기 및 DB 업데이트
|
|
if ($U_intro_flag === '1') {
|
|
// 읽음 완료 상태: 메인으로 이동
|
|
header("Location: /skin/index.php");
|
|
exit;
|
|
} else {
|
|
// 읽지 않음(0) 상태: DB 업데이트 후 인트로로 이동
|
|
$stmtUpdate = $pdo->prepare(
|
|
'UPDATE edu_users
|
|
SET intro_flag = "1"
|
|
WHERE member_id = ?
|
|
AND sys_comp_code = ?
|
|
AND intro_flag = "0"'
|
|
);
|
|
$stmtUpdate->execute([$U_member_id, $U_sys_comp_code]);
|
|
|
|
// 업데이트 성공 후 세션 동기화 (인트로 이동 직전)
|
|
$_SESSION['intro_flag'] = '1';
|
|
|
|
header("Location: /skin/intro.php");
|
|
exit;
|
|
}
|
|
|
|
} catch (Exception $e) {
|
|
error_log("Entry Error: " . $e->getMessage());
|
|
exit('시스템 오류가 발생했습니다. 잠시 후 다시 시도해주세요.');
|
|
} |