在会话中存储PHP对象?

时间:2011-12-22 14:40:19

标签: php forms oop session

我有一个多页面表单,我试图在我的网站上实现,其工作原理如下:

  

1输入客户详细信息 - $ _POST - > 2确认客户详细信息 - $ _ SESSION - > 3从客户详细信息生成PDF

正如您在第二页上看到的那样,我从$ _POST中获取了表单中的值。在同一页面上,我从我的班级中创建一个名为“customer”的对象,名为 customer ,它存储从我的第一页发布的所有值。

然后我设置一个名为“customer”的$ _SESSION变量并将其分配给我的对象。

session_start();  

        //includes html header part of page
        include("includes/page/header.php");



        //customer class 
        include("classes.php");


        $customer = new customer();


        $_SESSION['customer'] = $customer;

现在,在我网站的最后一页上,我有以下代码:

    session_start();

//assign customer to equal object stored in session
$customer = $_SESSION['customer'];


//to test if successfull , nothing is displayed!
echo $customer->first_name;


return 0;

我的页面上没有显示任何测试,因此我的会话没有按照我的想法进行。

供参考:

  • 我的班级客户很好并且工作正常并正确存储所有值!
  • 我的帖子数组工作正常

最后一页上的会话var_dump。

object(__PHP_Incomplete_Class)#1 (15) { ["__PHP_Incomplete_Class_Name"]=> string(8) "customer" ["first_name"]=> string(5) "Iain" ["second_name"]=> string(6) "Taylor" ["company_name"]=> string(10) "Wired Ltd." ["address_1"]=> string(15) "14 Joseph St" ["address_2"]=> string(8) "West End" ["city"]=> string(7) "Glasgow" ["postcode"]=> string(7) "G45 NP4" ["county"]=> string(29) "Scotland" ["country"]=> string(14) "United Kingdom" ["email"]=> string(31) "somebody@somebody.com" ["phone"]=> NULL ["cid"]=> NULL ["reg_date"]=> NULL ["tel"]=> string(11) "01413395678" } 

任何想法如何让这个工作?

由于

圣诞快乐!

2 个答案:

答案 0 :(得分:5)

您需要在include("classes.php");之前的最后一页上执行session_start(),因为在反序列化会话变量时,PHP会尝试实例化您在会话数据中放入的同一个类的对象。因此,如果PHP无法找到该类,则会引发错误。

答案 1 :(得分:1)

@Timur是绝对正确的,除了他错过了一件事。您需要在每个页面上移动类包括session_start(),而不仅仅是最后一个。

“调用session_start()时会发生自动序列化/反序列化。 这意味着您包含文件并调用session_start()的顺序非常重要。“ - PHP Session with an Incomplete Object

在你提问之前,下次做一些研究。这是谷歌搜索“PHP不完整类”的第三个结果。

作为一般规则,您应该在每个脚本的最顶部包含所有文件。这样你就不会遇到像这样的任何依赖性问题。