회원에게 if (!$member[mb_id]) 값이 null로 나오는 이유가 뭘까요? 정보
회원에게 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 ---------------------------------------
}
댓글 전체
ㅜ_ㅜ; 도움은 안되겠지만
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("회원만 이용하실 수 있습니다.");
}
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("회원만 이용하실 수 있습니다.");
}
if ($_SESSION['ss_mb_id']) // 로그인중이라면
{
$member = get_member($_SESSION['ss_mb_id']);
}
이부분은 앞에서 _common.php를 include했기 때문에 이미 실행된 것 입니다. ㅠ..ㅠ.
{
$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;
}
}
!!!!!!!!!!!ㅡ,..ㅡ;
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;
}
}
!!!!!!!!!!!ㅡ,..ㅡ;
if (!$member['mb_id'])
alert_close("회원만 이용하실 수 있습니다.");
아니면
if ( empty( $member['mb_id']))
alert_close("회원만 이용하실 수 있습니다.");
alert_close("회원만 이용하실 수 있습니다.");
아니면
if ( empty( $member['mb_id']))
alert_close("회원만 이용하실 수 있습니다.");
if (!$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;
}
}
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;
}
}
질문의 요지가 /bbs/memo.php 에서 $member[mb_id]이 널이라는 거죠?
해당파일에서 print_r($member)를 찍어보셨나요?
어딘가에서 unset됐을테니까 그건 직접 찾으셔야겠고...
(unset이 아니라면 부모자식간의 세션공유가 안되는 경우?
부모는 www가 붙고 자식은 안붙고... 아님 그 반대... 아무튼...)
임시방편으로 /bbs/memo.php에서
$member = array();
$member = get_member($_SESSION['ss_mb_id']);
if (!$member[mb_id])
alert_close("회원만 이용하실 수 있습니다.");
.....
해당파일에서 print_r($member)를 찍어보셨나요?
어딘가에서 unset됐을테니까 그건 직접 찾으셔야겠고...
(unset이 아니라면 부모자식간의 세션공유가 안되는 경우?
부모는 www가 붙고 자식은 안붙고... 아님 그 반대... 아무튼...)
임시방편으로 /bbs/memo.php에서
$member = array();
$member = get_member($_SESSION['ss_mb_id']);
if (!$member[mb_id])
alert_close("회원만 이용하실 수 있습니다.");
.....
앞에서 _common.php를 include를 하기 때문에 unset 된 것을 다시 set해주고 있어요.
부모자식간 세션공유의 문제일 수도 있는데 ( .도메인.co.kr 과 같이 쿠키 도메인을
주고는 있어요) ... 이게 재현이 안되고 계속 오류신고만 들어오니 황당한거죠. ㅠ..ㅠ..
임시방편은 _common.php에 있는 코드라서... 넣는다고 해결책은 아닌거 같아요.
부모자식간 세션공유의 문제일 수도 있는데 ( .도메인.co.kr 과 같이 쿠키 도메인을
주고는 있어요) ... 이게 재현이 안되고 계속 오류신고만 들어오니 황당한거죠. ㅠ..ㅠ..
임시방편은 _common.php에 있는 코드라서... 넣는다고 해결책은 아닌거 같아요.
$member['mb_id']
와
$member[mb_id]
랑 차이 때문에 생기는 문제가 아닐까 해서요.
와
$member[mb_id]
랑 차이 때문에 생기는 문제가 아닐까 해서요.
회원에 따라서 되다가 안되다가 하는 것인데... ㅠ..ㅠ...
memo.php에서
모든 global 변수를 다 print해 보면 뭔가 나오지 않을까요?
모든 global 변수를 다 print해 보면 뭔가 나오지 않을까요?
재현이 잘 안되는 관계로... 정상적인 경우만 프린트 될꺼 같네요. ㅠ..ㅠ...
전체 세션을 다 날려보시고 사용자의 pc에 문제가 있는 것 아닐까요 ?
자동로그인, 쿠키 등.
자동로그인, 쿠키 등.
세션은 배추팁으로 꾸준히 정리중이고, 가끔씩 전체삭제도 합니다.
사용자 PC에 문제가 있다면 그누 게시판도 안되야 하는데,
게시판은 잘 되면서 가끔씩 쪽지가 안된다는 사람들이 있어요. ㅠ..ㅠ...
이것은 윈도가 새로 뜨면서 뭔가 문제가 생기는거 같기도 하구요.
사용자 PC에 문제가 있다면 그누 게시판도 안되야 하는데,
게시판은 잘 되면서 가끔씩 쪽지가 안된다는 사람들이 있어요. ㅠ..ㅠ...
이것은 윈도가 새로 뜨면서 뭔가 문제가 생기는거 같기도 하구요.
고수님들 여기다 모이셨네요 -_-;;
이미 있는 코드다~ 재현이 안된다~ 이렇게 하나하나 따지면 결국은 오류못잡아요.
메시지출력전에 에러리포팅 파일을 만들어서 주기적으로 관찰해보는 건 어떨지요...
if (!$member[mb_id])
{
include_once('./error_reporting.php');
alert_close("회원만 이용하실 수 있습니다.");
}
리포팅파일에는 의심되는 부분을 기록하는 코드를 심어야겠죠.
슈퍼전역변수를 모두 기록한다거나 엑스엠엘님 말처럼 그누보드의 전역변수를 찍어본다거나...
메시지출력전에 에러리포팅 파일을 만들어서 주기적으로 관찰해보는 건 어떨지요...
if (!$member[mb_id])
{
include_once('./error_reporting.php');
alert_close("회원만 이용하실 수 있습니다.");
}
리포팅파일에는 의심되는 부분을 기록하는 코드를 심어야겠죠.
슈퍼전역변수를 모두 기록한다거나 엑스엠엘님 말처럼 그누보드의 전역변수를 찍어본다거나...
애러 리포팅은 생각도 안했네요. ㅋㅋ
문제가 되는 경우에 ss_mb_id, uri, time_stamp를 찍어두면 되겠네요.
지금 추측은 윈도가 새로 쓰는 과정에서 세션정보가 없어지는거 같아요.
문제가 되는 경우에 ss_mb_id, uri, time_stamp를 찍어두면 되겠네요.
지금 추측은 윈도가 새로 쓰는 과정에서 세션정보가 없어지는거 같아요.