2026, 새로운 도약을 시작합니다.

아이디 저장 기능 구현

· 2개월 전 · 280 · 1

로그인 페이지에서 '자동 로그인' 대신에 '아이디 저장'을 구현해 보았습니다.

/skin/member/basic/login_check.skiin.php 에 함수와 호출 부분을 삽입하거나

/bbs/login_check.php 에서 $mb 변수 생성된 다음에 붙여넣으면 됩니다.

로그인페이지 /skin/member/basic/login.skiin.php

php 부분에 추가합니다.

[code]
$ck_mb_id = $_COOKIE['ck_mb_id'] ?? '';
[/code]

로그인 페이지에서 자동로그인 체크박스 만들고 name = save_id, value = 1 설정해서 넘어가도록 합니다.

[code]

<input type="checkbox" name="save_id" id="save_id" class="selec_chk" value="1" <?= $ck_mb_id ? 'checked' : ''; ?>>
[/code]

로그인페이지 /skin/member/basic/login.skiin.php 아이디 출력 부분value를 추가합니다.

[code]
<input type="text" name="mb_id" id="login_id" required class="frm_input required" size="20" maxLength="20" placeholder="아이디" value="<?= $ck_mb_id ? htmlspecialchars($ck_mb_id) : ''; ?>">
[/code]
 

함수

[code]

/**
 * 로그인 성공 후 아이디 저장 쿠키 처리
 *
 * @param string $mb_id    회원 아이디
 * @param mixed  $save_id  '1'이면 저장, 그 외는 삭제
 */
function handle_save_id_cookie($mb_id, $save_id = '')
{
    // 값이 없으면 0 처리
    if ($save_id === '' || $save_id === null) {
        $save_id = 0;
    }

    // 로그인 성공한 경우만 실행
    if (!$mb_id) return;

    // HTTPS 감지
    $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');

    // 현재 도메인 자동 감지 (www 제거)
    $domain = '.' . preg_replace('/^www\./', '', $_SERVER['HTTP_HOST']);

    // 쿠키 설정/삭제
    if ($save_id == '1') {
        setcookie('ck_mb_id', $mb_id, time() + 86400 * 30, '/', $domain, $secure, false);
    } else {
        setcookie('ck_mb_id', '', time() - 3600, '/', $domain);
    }

    // URL 파라미터 정리 (남아있으면 ?save_id=1 붙는 현상 방지)
    unset($_POST['save_id'], $_GET['save_id']);
}

[/code]

사용법

[code]
// $save_id = $_POST['save_id]
handle_save_id_cookie($mb['mb_id'], $save_id);
[/code]

** 기본의 경우 /skin/member/basic/logon_check.skin.php 에 추가

** 아니면 extend 폴더에 추가

** event.member_login_check_before.saveid.php

** 아니면 아래처럼 hook으로 처리할 수도 있습니다.

** 저는 버전이 5.5.15 라 addAction입니다.

[code]
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

$hook = get_hook_class();

$hook->addAction('member_login_check_before', function(){
    // 아이디
    $mb_id = $_POST['mb_id'] ?? '';
    // 아이디 저장 체크박스
    $save_id = $_POST['save_id'] ?? 0;
    // HTTPS 여부 감지
    $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
    // 도메인 자동 감지 (www 제거)
    $domain = '.' . preg_replace('/^www\./', '', $_SERVER['HTTP_HOST']);

    // 아이디 저장 체크된 경우 → 30일 쿠키
    if ($save_id === '1' && $mb_id) {
        setcookie('ck_mb_id', $mb_id, time() + 86400 * 30, '/', $domain, $secure, false);
    }
    // 체크 해제 또는 로그인 시도 아이디 없음 → 쿠키 삭제
    else {
        setcookie('ck_mb_id', '', time() - 3600, '/', $domain);
    }
    unset($_POST['save_id'], $_GET['save_id']);
});
[/code]

첨부파일

login_check.skin.php (1.1 KB) 4회 2025-10-18 02:13
|

댓글 1개

좋은 정보 수고하셨습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.
번호 분류 제목 글쓴이 날짜 조회
5402 MySQL 5일 전 조회 21
5401 JavaScript 2주 전 조회 115
5400 MySQL 1개월 전 조회 221
5399 PHP 2개월 전 조회 465
5398 PHP 2개월 전 조회 352
5397 PHP 2개월 전 조회 281
5396 기타 5개월 전 조회 559
5395 PHP 6개월 전 조회 1,195
5394 MySQL 7개월 전 조회 790
5393 웹서버 9개월 전 조회 984
5392 1년 전 조회 1,307
5391 11개월 전 조회 1,318
5390 11개월 전 조회 1,113
5389 10개월 전 조회 1,028
5388 10개월 전 조회 1,170
5387 9개월 전 조회 962
5386 JavaScript 9개월 전 조회 1,148
5385 웹서버 9개월 전 조회 1,169
5384 JavaScript 10개월 전 조회 991
5383 기타 11개월 전 조회 1,414
5382 기타 11개월 전 조회 659
5381 JavaScript 11개월 전 조회 1,074
5380 기타 11개월 전 조회 832
5379 JavaScript 11개월 전 조회 830
5378 1년 전 조회 1,396
5377 기타 1년 전 조회 940
5376 jQuery 1년 전 조회 637
5375 jQuery 1년 전 조회 871
5374 기타 1년 전 조회 947
5373 MySQL 1년 전 조회 980
🐛 버그신고