2013-06-23 3 views
0

나는 내 문제에 대한 기존 답변을 검토했습니다. 나는이 때까지 바로 바로 과정을 통해 값을 echo'd과 한클래스가 보호 된 값을 보유하지 않음

"헤더 ('위치"명령 값이 그대로 유지됩니다. 비슷한에 대한 제안

나는 그것이 직렬화 문제를 생각하지 않습니다

class clsSetUser { 
    protected $UserID = 0; 

    public function initUser($id) { 
    // get user details from database 

    $this->setUserID($id); 
    // etc... 
    } 

    private function setUserID($value) { $this->UserID = $value; } 
    public function getUserID() { return $this->UserID; } 
} 

common.php :

if(unset($clsUser)) $clsUser = new clsSetUser; 
문제는 ... 여기

클래스의 관련 비트입니다

로그인-exec.php :

$clsUser->initUser($id); 

header("Location: somewhere.php"); 

somewhere.php :

echo $clsUser->getUserID(); 

// here it equals 0 

어떤 아이디어? "헤더"가 모든 것을 직렬화합니까?

답변

0

PHP는 실제로 깨끗한 슬레이트 (somewhere.php)에서 시작하기 때문입니다.

header("Location: somewhere.php");은 브라우저에 다른 페이지에 연결하라는 명령을 보냅니다. 이 페이지에서 이전 페이지의 변수는 PHP에서 사용할 수 없습니다.

somewhere.php을 방문 할 때 데이터베이스에서 사용자를 다시로드 할 수 있도록 $_SESSION에 userId를 설정해야합니다.

은 로그인-exec.php

$clsUser->initUser($id); 
$_SESSION['user_id'] = $id; 
header("Location: somewhere.php"); 

somewhere.php

$clsUser->initUser($_SESSION['user_id']); 
+0

생각 나는 - 나는 너무 많은 $ _SESSION을 사용하지 않도록 기대했다. 새로운 페이지를 열 때마다 데이터베이스에 계속해서 도달하는 것은 비논리적입니다. 정보 주셔서 감사합니다. –

+0

왜 사용자 개체에 대해 데이터베이스에 충돌하지 않도록 하시겠습니까? 사용자/세션 테이블의 색인이 제대로 생성되면 사용자 개체를 가져 오는 데 시간이 전혀 걸리지 않습니다. 그렇지 않으면 필요한 사용자 정보를 쿠키에 저장하려고 시도 할 수 있지만 각 요청에 따라 해당 데이터가 서버로 전송됩니다. 그러면 페이지로드 시간이 늘어날 수 있습니다. – EWit

+0

사용자 개체뿐만 아니라 데이터베이스 개체 및 ini 파일에서 변경되지 않고 다양한 값을 갖습니다. 모두 처리 시간이 추가되었으므로 한 번만 수행해야합니다. 나는 수백 페이지의 매우 큰 어플리케이션을 가지고있다. 나는 완전한 OO 시스템을 구축하기를 원했지만 PHP에서는 분명하지 않다. 헤더 명령어가 발행 될 때마다 클래스가 파괴되면 나는 이것을 할 수 없다. –