세진컴퓨터랜드

아이디 저장 기능 구현

· 3개월 전 · 317 · 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개

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

댓글 작성

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

로그인하기
🐛 버그신고