2012-01-16 4 views
0

PHP에서 사용자 정의 세션 처리기 구현에 문제가 있습니다.db를 사용하는 PHP의 사용자 정의 세션 핸들러

require_once 'DbSession.php'; 
$session = new DbSession(); 
session_start(); 

하지만 내 페이지를 볼 수 없습니다 코드 : 나는 DB와 연결이 후 http://pastebin.com/9QV9f22Q

내 프레임 워크에 한번 초기화는 부트 스트랩. Firefox는 "서버를 찾을 수 없습니다"오류로 302 상태를 얻습니다. 방화범이 끌린 내용은 내용이 5k이지만 페이지를 볼 수 없다고합니다.

은 로그인 한 다시로드 후 : 아직도 DbSession 인스턴스를 생성하는 "손실"왜 http://pastebin.com/JYe14nGR

궁금하다. 어떤 아이디어가 있습니까? TIA

답변

0

코드는 거짓 전제를 기반으로합니다 : 다른 개체를 PHP 생성자에서 반환 할 수 있습니다. 반대쪽 : PHP 은 생성자의 반환 값인을 완전히 무시합니다.

실제로 일어나는 일이 있습니다.

코드를 호출

$session = new DbSession(); 

$firstTime == false 검사 실행, getInstance()을 의미 불려갑니다.

getInstance은 기존 인스턴스가 없으므로 setup()을 호출합니다.

setup()을 다시 호출합니다. 이번에는 다른 호출이 getInstance()이되지 않도록 인수를 전달합니다. 객체를 생성하고 세션 핸들러로 등록한 다음 반환합니다.

getInstance은 정적 변수에서 객체를 shoves 한 다음 원래 생성자 호출로 반환합니다. 원래 생성자 호출은 기존 객체를 바닥에 떨어 뜨리고 새로운 자체 복제본을 반환합니다.

setup/getInstance() 외부의 개체를 절대로 인스턴스화하지 않아도 일부를이 광기의으로 수정할 수 있습니다. 생성자를 보호하고 오직 getInstance() 만 호출하도록하십시오.

그러나 이것으로 인해 코드가 왜 오작동하는지 알 수 없습니다. 사실, 우리는 그것을 설명 할 수도 없습니다. 코드의 나머지 부분은 모두입니다. 어떤 데이터베이스 어댑터를 사용하고 있고, 어떤 ORM을 사용하고 있습니까 (또는 ORM을 사용하고 있으며, 클래스와 메소드 이름이 제안 했음). 프레임 워크가 관련 될 수 있습니다.

전체 클래스에서 손을 떼어보십시오. 디스크에 파일을 작성하십시오. 을 먼저으로 작업 한 다음 데이터베이스 계층을 도입하십시오. 그 시점에서 오류가 분명해질 가능성이 있습니다.

관련 문제