2011-08-26 162 views
0

我有一个创建一个新的登录类的index.php页面(登录类完成所有数据的处理,建立会话,重定向等)问题与登录PHP脚本 - 传递对象通过会话

指数.PHP我创建了一个新的登录类

require_once('login.class.php'); 
    $login = new Login; 

登录构造看起来像这样

public function __construct(){ 
    // Start session and open a database connection 
    session_start(); 
    $this->connectToDB(); 
} 

如果用户登录成功,我重定向他securePage.php。

,如果我这样做对securePage.php

$test = $_SESSION ['usrData']; 
var_export($test->getFirstName()); 
var_export($test->getLastName()); 
var_export($test->isAuthorized()); 

下它会显示以下错误

Fatal error: Call to a member function getFirstName() on a non-object in /login/securePage.php on line 17

然而,当我把

$login = new Login; 

var_export($test->getFirstName()); 
var_export($test->getLastName()); 
var_export($test->isAuthorized()); 

它的工作原理!我不”知道是什么给了,如果我做错了什么,因为即使当我把

session_start(); 

,而不是

$login = new Login; 

,但它仍然给我的错误

Fatal error: Call to a member function getFirstName() on a non-object in /login/securePage.php on line 16

+0

var_export($ login);'?的结果是什么? – xdazz

回答

0

我认为它与变量名有关。如果我没有错,在你的securePage中。PHP的,这里是代码:

$login = $_SESSION ['usrData']; 
var_export($login); 
var_export($test->getFirstName()); 

它应该是:

$login = $_SESSION ['usrData']; 
var_export($login); 
var_export($login->getFirstName()); 

希望它能帮助。

+0

废话!你是对的!通过我所做的所有测试,我完全搞糟了var_exports中的变量名。除了构造函数中的session_start()。其他代码在OOP设计方面如何? – CodeCrack

+0

虽然我不是OOP方面的专家。但是,从我所看到和了解的OOP中,我认为你的设计对我来说看起来很好。但是,也许一些面向对象的专家可以帮助你更多地了解这一点。 =) – nero

1

可能是几件事:

- 你必须在使用会话的任何页面顶部执行session_start()。

- 使用序列化对象(存储在会话变量中的对象),对象类需要包含在引用的任何位置。

看起来更可能是你没有session_start()?

另外资源变量(数据库句柄,文件句柄等)将不会在会话变量发生的序列化/反序列化中幸免于难。

+0

我确实在页面顶部有session_start,但它仍然给出相同的错误。 – CodeCrack

+0

我现在还添加了完整的源代码,请查看它。 – CodeCrack

+0

你不应该在你的对象的构造函数中做一个session_start()。这只是要求麻烦。 – gview

0

在发布重定向之前关闭会话是一种很好的做法(尽管我希望在浏览器请求新页面之前不会写入会话)。

该行'var_export($ login);'在securePage.php中生成? (注释导致致命错误的调用)。