How to properly address PHP_Incomplete_Class issue

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

PHP code ?
1
2
3
session_start();
$user_info  new   qa_user();
$_SESSION [ 'subscribe' ] =  base64_encode (serialize( $user_info ));


引用的时候
PHP code ?
1
2
session_start();
$user_info  = unserialize( base64_decode ( $_SESSION [ 'subscribe' ]));




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值