19'C 흐림
서울 강남구
이 글은 관리자가 설정한 특별한 코드를 입력해야만 사용자가 특정 게시판에 접근할 수 있도록 하는 방법에 대해 설명합니다. 이 방법은 일반적인 게시물의 비밀글 기능과는 달리 특정 게시판의 전체 리스트, 내용 보기, 글쓰기 등에 적용됩니다. 코드를 변경하면, 이전에 접근 가능했던 사용자들도 다시 코드를 입력해야 접근할 수 있으므로, 변경된 코드를 사용자들에게 재공지 해야 합니다.
구현 방법 요약:
구현 내용:
1. 게시판 접근 암호 설정
- 관리자 페이지 > 게시판 관리 > 게시판 설정 > 여분필드 1 값
게시판에 접근할 수 있는 암호 코드를 게시판 여분필드 1 값에 입력합니다.
아래의 구현한 스크립트에서는 영문(대소문자 구분)과 숫자로 이루어져 있는지 검사하도록 되어있습니다.
2. 세션 시작 및 게시판 접근 시 코드 확인 로직 시작:
- 파일: bbs/board.php
<?php
include_once('./_common.php');
session_start();
function convertToSeconds($hours, $minutes, $seconds) {
return ($hours * 3600) + ($minutes * 60) + $seconds;
}
$accessCode = $board['bo_1']; // 관리자가 설정한 접근 코드, 게시판 설정 여분
$boardId = 'promotion'; // 특정 게시판의 bo_table ID, 예제에서는 promotion 게시판
$sessionDuration = convertToSeconds(0, 10, 0); // 세션 유지시간 (시간, 분, 초), 예제에서는 10분
if ($bo_table == $boardId) {
if ($is_admin === 'super') {
// 최고 관리자는 바로 접근 가능
} else {
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['code']) && $accessCode !== '') {
if ($_POST['code'] === $accessCode) {
$_SESSION['board_access'] = time();
// 세션 만료 시간 설정
$_SESSION['session_expire'] = time() + $sessionDuration;
header("Location: " . G5_URL.'/'.$bo_table); // 세션 만료시 리다이렉트 되는 URL
exit;
} else {
alert('코드가 일치하지 않습니다.');
}
}
if (isset($_SESSION['session_expire'])) {
if (time() > $_SESSION['session_expire']) {
// 세션 종료
unset($_SESSION['board_access']);
unset($_SESSION['session_expire']);
echo "<script>alert('세션이 만료되었습니다. 다시 코드를 입력해주세요.');</script>";
include_once(G5_BBS_PATH.'/code_check.php'); // 코드 입력 폼
exit;
}
} else {
include_once(G5_BBS_PATH.'/code_check.php'); // 코드 입력 폼
exit;
}
}
}
bbs/code_check.php
(각자의 웹사이트에 맞도록 디자인해서 사용하시면 됩니다.)
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
include_once(G5_PATH.'/head.php');
?>
<form name="promotion_code" action="<?php echo G5_URL; ?>/promotion" onsubmit="return code_submit(this);" method="post">
<fieldset>
<legend>프로모션 코드 입력</legend>
<label for="code">접근코드</label>
<input type="text" name="code" id="code" required class="required" placeholder="코드" oninput="return restrictInput(this, event)">
<button type="submit">입력하기</button>
</fieldset>
</form>
<script>
function restrictInput(input, event) {
var value = input.value;
input.value = value.replace(/[^a-zA-Z0-9]/g, '');
}
function code_submit(f) {
var code = f.code.value;
// 코드가 비어있는지 확인
if (code == "") {
alert("코드를 입력해주세요.");
f.code.focus();
return false;
}
// 코드가 영문자(대소문자 구분), 숫자만 포함하는지 확인
var validCharacters = /^[a-zA-Z0-9]+$/;
if (!validCharacters.test(code)) {
alert("코드는 영문자(대소문자 구분)과 숫자만 포함할 수 있습니다.");
f.code.focus();
return false;
}
return true;
}
</script>
<?php include_once(G5_PATH.'/tail.php');