2011-08-25 2 views
1

제 생각에는 객체를 직렬화하고 세션을 통과 시키면 (예 : index.php 페이지에서 securePage.php로 넘어갈 때) SESSION은 해당 객체 데이터를 전달하기 때문에 객체의 기능을 사용할 수 없습니다. 유일한 방법은 전달한 데이터로 securePage.php에 새 객체를 만드는 것입니다. 실제 객체를 전달한 다음 securePage.php에 새로운 객체를 만들지 않고 함수를 사용하는 방법이 있습니까?세션을 통해 객체를 전달하고 해당 함수를 사용하는 방법이 있습니까?

예 : 세션에로드 된 개체를 얻을, 당신이 때 unserialize 호출하기 전에 어딘가에 클래스 정의를 포함 할 필요가의

$randomObj = new rndObject; 
$_SESSION['object'] = serialize($randomObj); 

및 securePage.php

$whatever = unserialize($_SESSION['object']); 

//below code won't work and say something like 
//Fatal error: Call to a member function checkAccess() on a non-object in 
//securePage.php on line 39 
echo $whatever->checkAccess(); 
+0

당신은 단순히 세션 변수'$ _SESSION [에 개체를 할당 할 수 있습니다 'object'] = $ randomObj', 직접 직렬화 할 필요는 없습니다. 세션에서로드하는 경우에도 동일하게 작동합니다 (해당 클래스가 클래스에 알려져있는 경우). – martinstoeckli

답변

3

정렬 및 예상대로 작동하지만 기술적으로 새로운 인스턴스를 만듭니다.

0

당신은 (__sleep 사용한다)와 __wakeup() 매직 메소드 (즉, 그것은을 위해 무엇의) :

http://www.tuxradar.com/practicalphp/6/13/0

http://php.net/manual/en/language.oop5.magic.php

+0

어쨌든 개체가 직렬화/역 직렬화 될 것이므로 다른 개체에 생명체를 전달할 수 없습니다. 세션에서 개체를로드하기 전에 클래스를 포함하면 개체의 새 인스턴스가 생성되며 이는 CodeCrack이 원하는 것입니다. – martinstoeckli

+0

@martinstoeckli : 나는 그 반대라고 말 했나요? 해당 URL의 예제를보십시오. 물론 세션은 텍스트가 아닌 객체이기 때문에 객체가 직렬화됩니다. 어쨌든, 이러한 마법 방법은 직렬화를 형성하고 그렇게하는 동안 다른 작업을 수행하는 데 도움을 줄 수 있습니다. 내 대답은 cwallenpoole의 대답에 대한 의견이어야한다. 나는 그 사실을 알고있다. – Shikiryu

+0

죄송합니다. __sleep() 및 __wakeup()이 직렬화 된 객체를 다시 가져 오는 데 도움이된다는 것을 이해했습니다. – martinstoeckli

관련 문제