회원에게 if (!$member[mb_id]) 값이 null로 나오는 이유가 뭘까요?
쪽지 기능을 보면 memo.php의 가장 앞에 아래처럼 $member[mb_id]의 값으로
회원여부를 확인 합니다. 그런데, 가끔씩 일반회원들이 로그인할 때 회원만 이용
할 수 있다고 하면서 오류메시지가 나옵니다. 일반 게시판의 이용은 정상인데
팝업으로 창이 뜨는 메모에서만 회원만 이용할 수 있다는 메시지가 가끔씩 나오는
이유가 뭘까요???
저도 몇번 보기는 했지만 지속적인 재현이 안되네요. ㅠ..ㅠ...
/bbs/memo.php의 가장 앞부분
if (!$member[mb_id])
alert_close("회원만 이용하실 수 있습니다.");
/js/common.js의 메모호출 부분
function win_memo(url)
{
if (!url)
url = g4_path + "/" + g4_bbs + "/memo.php";
win_open(url, "winMemo", "left=50,top=50,width=616,height=460,scrollbars=1");
}
common.php의 $member 변수 setting 부분
// 자동로그인 부분에서 첫로그인에 포인트 부여하던것을 로그인중일때로 변경하면서 코드도 대폭 수정하였습니다.
if ($_SESSION['ss_mb_id']) // 로그인중이라면
{
$member = get_member($_SESSION['ss_mb_id']);
// 오늘 처음 로그인 이라면
if (substr($member['mb_today_login'], 0, 10) != $g4['time_ymd'])
{
// 첫 로그인 포인트 지급
insert_point($member['mb_id'], $config['cf_login_point'], "{$g4['time_ymd']} 첫로그인", "@login", $member['mb_id'], $g4['time_ymd']);
// 오늘의 로그인이 될 수도 있으며 마지막 로그인일 수도 있음
// 해당 회원의 접근일시와 IP 를 저장
$sql = " update {$g4['member_table']} set mb_today_login = '{$g4['time_ymdhis']}', mb_login_ip = '{$_SERVER['REMOTE_ADDR']}' where mb_id = '{$member['mb_id']}' ";
sql_query($sql);
}
}
else
{
// 자동로그인 ---------------------------------------
// 회원아이디가 쿠키에 저장되어 있다면 (3.27)
if ($tmp_mb_id = get_cookie("ck_mb_id"))
{
// 최고관리자는 자동로그인 금지
if ($tmp_mb_id != $config['cf_admin'])
{
$sql = " select mb_password, mb_intercept_date, mb_leave_date, mb_email_certify
from {$g4['member_table']} where mb_id = '$tmp_mb_id' ";
$row = sql_fetch($sql);
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $row['mb_password']);
// 쿠키에 저장된 키와 같다면
$tmp_key = get_cookie("ck_auto");
if ($tmp_key == $key && $tmp_key)
{
// 차단, 탈퇴가 아니고 메일인증이 사용이면서 인증을 받았다면
if ($row['mb_intercept_date'] == "" &&
$row['mb_leave_date'] == "" &&
(!$config['cf_use_email_certify'] || preg_match('/[1-9]/', $row['mb_email_certify'])) )
{
// 세션에 회원아이디를 저장하여 로그인으로 간주
set_session("ss_mb_id", $tmp_mb_id);
// 페이지를 재실행
echo "<script language='javascript'> window.location.reload(); </script>";
exit;
}
}
// $row 배열변수 해제
unset($row);
}
}
// 자동로그인 end ---------------------------------------
}
회원여부를 확인 합니다. 그런데, 가끔씩 일반회원들이 로그인할 때 회원만 이용
할 수 있다고 하면서 오류메시지가 나옵니다. 일반 게시판의 이용은 정상인데
팝업으로 창이 뜨는 메모에서만 회원만 이용할 수 있다는 메시지가 가끔씩 나오는
이유가 뭘까요???
저도 몇번 보기는 했지만 지속적인 재현이 안되네요. ㅠ..ㅠ...
/bbs/memo.php의 가장 앞부분
if (!$member[mb_id])
alert_close("회원만 이용하실 수 있습니다.");
/js/common.js의 메모호출 부분
function win_memo(url)
{
if (!url)
url = g4_path + "/" + g4_bbs + "/memo.php";
win_open(url, "winMemo", "left=50,top=50,width=616,height=460,scrollbars=1");
}
common.php의 $member 변수 setting 부분
// 자동로그인 부분에서 첫로그인에 포인트 부여하던것을 로그인중일때로 변경하면서 코드도 대폭 수정하였습니다.
if ($_SESSION['ss_mb_id']) // 로그인중이라면
{
$member = get_member($_SESSION['ss_mb_id']);
// 오늘 처음 로그인 이라면
if (substr($member['mb_today_login'], 0, 10) != $g4['time_ymd'])
{
// 첫 로그인 포인트 지급
insert_point($member['mb_id'], $config['cf_login_point'], "{$g4['time_ymd']} 첫로그인", "@login", $member['mb_id'], $g4['time_ymd']);
// 오늘의 로그인이 될 수도 있으며 마지막 로그인일 수도 있음
// 해당 회원의 접근일시와 IP 를 저장
$sql = " update {$g4['member_table']} set mb_today_login = '{$g4['time_ymdhis']}', mb_login_ip = '{$_SERVER['REMOTE_ADDR']}' where mb_id = '{$member['mb_id']}' ";
sql_query($sql);
}
}
else
{
// 자동로그인 ---------------------------------------
// 회원아이디가 쿠키에 저장되어 있다면 (3.27)
if ($tmp_mb_id = get_cookie("ck_mb_id"))
{
// 최고관리자는 자동로그인 금지
if ($tmp_mb_id != $config['cf_admin'])
{
$sql = " select mb_password, mb_intercept_date, mb_leave_date, mb_email_certify
from {$g4['member_table']} where mb_id = '$tmp_mb_id' ";
$row = sql_fetch($sql);
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $row['mb_password']);
// 쿠키에 저장된 키와 같다면
$tmp_key = get_cookie("ck_auto");
if ($tmp_key == $key && $tmp_key)
{
// 차단, 탈퇴가 아니고 메일인증이 사용이면서 인증을 받았다면
if ($row['mb_intercept_date'] == "" &&
$row['mb_leave_date'] == "" &&
(!$config['cf_use_email_certify'] || preg_match('/[1-9]/', $row['mb_email_certify'])) )
{
// 세션에 회원아이디를 저장하여 로그인으로 간주
set_session("ss_mb_id", $tmp_mb_id);
// 페이지를 재실행
echo "<script language='javascript'> window.location.reload(); </script>";
exit;
}
}
// $row 배열변수 해제
unset($row);
}
}
// 자동로그인 end ---------------------------------------
}
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 17개
include_once("./_common.php");
if ($_SESSION['ss_mb_id']) // 로그인중이라면
{
$member = get_member($_SESSION['ss_mb_id']);
}
if ($member['mb_id'] == ""){
alert_close("회원만 이용하실 수 있습니다.");
}
$g4[title] = "내 쪽지함";
include_once("$g4[path]/head.sub.php");
해보세요...
이것도 안되면
아래
if ((!$member['mb_id']) && (!$_SESSION['ss_mb_id'])){
alert_close("회원만 이용하실 수 있습니다.");
}
{
$member = get_member($_SESSION['ss_mb_id']);
}
이부분은 앞에서 _common.php를 include했기 때문에 이미 실행된 것 입니다. ㅠ..ㅠ.
if ((!$member['mb_id']) && (!$_SESSION['ss_mb_id'])){
alert_close("회원만 이용하실 수 있습니다.");
}else{
if (!$member['mb_id']){
alert_close("회원만 이용하실 수 있습니다.");
echo "<script language='javascript'> window.location.reload(); </script>";
exit;
}
}
!!!!!!!!!!!ㅡ,..ㅡ;
alert_close("회원만 이용하실 수 있습니다.");
아니면
if ( empty( $member['mb_id']))
alert_close("회원만 이용하실 수 있습니다.");
alert_close("회원만 이용하실 수 있습니다.");
이부분에서 오류가 나오는거에요.... ㅠㅠ...
if ((!$member['mb_id']) && (!$_SESSION['ss_mb_id'])){
alert_close("회원만 이용하실 수 있습니다.");
}else{
if (!$member['mb_id']){
alert_close("회원만 이용하실 수 있습니다.");
echo "<script language='javascript'> window.location.reload(); </script>";
exit;
}
}
해당파일에서 print_r($member)를 찍어보셨나요?
어딘가에서 unset됐을테니까 그건 직접 찾으셔야겠고...
(unset이 아니라면 부모자식간의 세션공유가 안되는 경우?
부모는 www가 붙고 자식은 안붙고... 아님 그 반대... 아무튼...)
임시방편으로 /bbs/memo.php에서
$member = array();
$member = get_member($_SESSION['ss_mb_id']);
if (!$member[mb_id])
alert_close("회원만 이용하실 수 있습니다.");
.....
부모자식간 세션공유의 문제일 수도 있는데 ( .도메인.co.kr 과 같이 쿠키 도메인을
주고는 있어요) ... 이게 재현이 안되고 계속 오류신고만 들어오니 황당한거죠. ㅠ..ㅠ..
임시방편은 _common.php에 있는 코드라서... 넣는다고 해결책은 아닌거 같아요.
와
$member[mb_id]
랑 차이 때문에 생기는 문제가 아닐까 해서요.
모든 global 변수를 다 print해 보면 뭔가 나오지 않을까요?
자동로그인, 쿠키 등.
사용자 PC에 문제가 있다면 그누 게시판도 안되야 하는데,
게시판은 잘 되면서 가끔씩 쪽지가 안된다는 사람들이 있어요. ㅠ..ㅠ...
이것은 윈도가 새로 뜨면서 뭔가 문제가 생기는거 같기도 하구요.
메시지출력전에 에러리포팅 파일을 만들어서 주기적으로 관찰해보는 건 어떨지요...
if (!$member[mb_id])
{
include_once('./error_reporting.php');
alert_close("회원만 이용하실 수 있습니다.");
}
리포팅파일에는 의심되는 부분을 기록하는 코드를 심어야겠죠.
슈퍼전역변수를 모두 기록한다거나 엑스엠엘님 말처럼 그누보드의 전역변수를 찍어본다거나...
문제가 되는 경우에 ss_mb_id, uri, time_stamp를 찍어두면 되겠네요.
지금 추측은 윈도가 새로 쓰는 과정에서 세션정보가 없어지는거 같아요.