from http://blog.mswic.com/post/How-to-properly-address-PHP_Incomplete_Class-issue.aspx
解决类放进session后,重新取出不能恢复(1,引入类文件 2.在session_start()之前引入)另外还要注意session.save_path(php.ini)的配置或者session_save_path('../session')的调用
When you store objects in PHP session state, you have to start the session in the right time. This is, after all class definitions has been included to your code. This way you avoid problems when extracting objects from session state back to variables.
Calling session_start() before class definitions are included to your script, will lead to wrong parsing of session objects. You can check that yourself:
<?php
session_start();
require_once("myclass.php");
if(isset($_SESSION['MyClass']))
{
$myclass=$_SESSION['MyClass'];
}
print(get_class($myclass));
exit;
?>
The above code will produce:
"__PHP_Incomplete_Class"
It means that object stored in session state isn't of MyClass type anymore! Now swap the first two php lines and the code will yield, as expected, "MyClass".
The difference is that when you try to call a method from incomplete class you will end with server error and no clue leading to what caused it... So, concluding it's always a good practice to call session_start() after all class definitions has been included in your script code. This way, you are sure you will never encounter any incomplete objects that cause so many hard to track problems...
2.先序列化,base64编码以后传给session
1
2
3
|
session_start();
$user_info
=
new
qa_user();
$_SESSION
[
'subscribe'
] =
base64_encode
(serialize(
$user_info
));
|
引用的时候
1
2
|
session_start();
$user_info
= unserialize(
base64_decode
(
$_SESSION
[
'subscribe'
]));
|