클래스로 만들어서 사용할 때 세션 변수 세팅 문제 질문이요 ~

클래스로 만들어서 사용할 때 세션 변수 세팅 문제 질문이요 ~

QA

클래스로 만들어서 사용할 때 세션 변수 세팅 문제 질문이요 ~

본문

php-4.0.1pl2를 사용하는데요 <br>
< br>
궁금한 점이 있어서 질문 드립니다...< br>
< br>
 사용자 인증하는 걸 클래스 형태로 만들었습니다.< br>
< br>
class auth{< br>
< br>
      var $password;< br>
      < br>
      fuction authentification(){< br>
< br>
              if ($this->success){< br>
< br>
                        메인 페이지로..;< br>
              }< br>
      }< br>
      function success($uid,$pass){< br>
                < br>
                #인증되면 아래코드로...< br>
        < br>
                session_start();< br>
                session_register("uid");< br>
                session_register("pass"); <- 이렇게 두개는 세션파일에 변수값이 기록이 됩니다.< br>
< br>
                $password=$pass;< br>
                session_register("password"); <- 이건 기록이 되지 않고 세션파일에 !password|< br>
                                                        이렇게 써지고 값이 들어가질 않습니다.< br>
                  return true;      < br>
        }< br>
< br>
}< br>
< br>
왜 이럴까요?  제가 뭘 잘못했나요???

 

이 질문에 댓글 쓰기 :

답변 1

포토폴라포 님의 글에서 'uid'와 'pass'는 세션파일에 변수값이 <br>
기록이 되고 'password'은 값이 기록되지 않는다고 했는데, 님의 <br>
소스코드로 판단하면 아래와 같이 'password' 뿐만 아니라 'uid'와 <br>
'pass' 도 비슷한 결과가 나와야 하는데요????< br>
< br>
!uid|!pass|!password|< br>
< br>
이 문제는 변수의 사용범위(scope)에 관한 문제입니다.< br>
함수 내에서 session_register의 인자로 변수명을 지정할 때는 <br>
그 변수를 반드시 global로 지정해 주어야 합니다. 지역변수를 <br>
가지고 지정해주면 위와 같이 비정상적인 결과가 나타납니다.< br>
< br>
아래의 예제 코드는 제 나름대로 수정한 코드입니다. 참고하세요.< br>
< br>
< br>
예제 코드 <br>
=========< br>
< br>
<?php< br>
// 파일명 : auth.php< br>
< br>
class auth{ < br>
    function authentification() { < br>
        Header("WWW-authenticate: basic realm="관리자 영역"");< br>
        Header("HTTP/1.0 401 Unauthorized");< br>
< br>
        $str  = "<html>
";< br>
        $str .= "<body>
";< br>
        $str .= "<script language="javascript">
";< br>
        $str .= "<!--
";< br>
        $str .= "    alert('관리자 인증에 실패하였습니다.')
";< br>
        $str .= "    history.back()
";< br>
        $str .= "//-->
";< br>
        $str .= "</script>
";< br>
        $str .= "</body>
";< br>
        $str .= "</html>";< br>
< br>
        echo($str);< br>
< br>
      exit;< br>
    } < br>
< br>
    function success($uid,$pass){ < br>
        global $password;< br>
< br>
        session_start(); < br>
        session_register("uid"); < br>
        session_register("pass"); < br>
< br>
        $GLOBALS[uid] = $uid;< br>
        $GLOBALS[pass] = $pass;< br>
< br>
        $password=$pass; < br>
        session_register("password"); < br>
    } < br>
} < br>
< br>
$auth = new auth;< br>
< br>
if(!$PHP_AUTH_USER) {< br>
    //< br>
    // 인증창에 값을 입력하지 않은 경우 다시 인증창을 띄운다.< br>
    //< br>
    $auth->authentification();< br>
} else {< br>
    $auth->success($PHP_AUTH_USER, $PHP_AUTH_PW);< br>
      echo("<META http-equiv='refresh' content='0; url=auth_post.php'>");< br>
}< br>
< br>
?>< br>
< br>
< br>
<?php< br>
// 파일명 : auth_post.php< br>
< br>
session_start(); < br>
session_register("uid"); < br>
session_register("pass"); < br>
session_register("password"); < br>
< br>
echo("uid=[$uid],pass=[$pass],password=[$password]<BR>");< br>
?>< br>
< br>
< br>
auth.php를 실행시키면 인증화면이 나타나고, 인증화면에서 아래와 같이 <br>
입력하면 <br>
< br>
사용자 이름(U): 홍길동 <br>
암호(P): 12345< br>
< br>
auth_post.php로 넘어가서 아래와 같은 결과가 화면에 나타납니다.< br>
< br>
< br>
실행결과 <br>
========< br>
uid=[홍길동],pass=[12345],password=[12345]< br>
< br>
< br>
세션파일 내용 <br>
=============< br>
uid|s:6:"홍길동";pass|s:5:"12345";password|s:5:"12345";< br>
< br>
< br>
이와 같이 함수 내에서 session_register의 인자로 변수명을 지정할 때는 <br>
그 변수를 반드시 global로 지정해 주어야 합니다. < br>
php 홈페이지의 http://www.php.net/manual/function.session-register.php 중 <br>
User Contributed Notes: session_register 의 내용을 살펴보면 이것을 확인 <br>
할 수 있습니다. 아래에 해당 부분을 발췌하여 첨부합니다.< br>
< br>
<첨부><br>
Actually, session_register(string) declares a variable with local scope.< br>
If you're in the main body of a script, 'local' scope is the same as< br>
global scope. If you're in a function, however, the variable will only< br>
be defined within the function, so you'll need to declare the variable< br>
you're registering as global on the first line of your function, e.g.< br>
< br>
function foo() { < br>
    global $bar; < br>
    session_start(); < br>
    session_register('bar'); < br>
} < br>
 < br>
< br>
< br>

 

답변을 작성하시기 전에 로그인 해주세요.
전체 171
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT