0

我有一个 index.php 页面,它创建了一个新的登录类(登录类完成所有数据处理、创建会话、重定向等)

index.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());

它显示以下错误

致命错误:在第 17 行的 /login/securePage.php 中的非对象上调用成员函数 getFirstName()

然而,当我把

$login = new Login;

在...前面

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

有用!我不知道是什么给了我,如果我做错了什么,因为即使我把

session_start();

代替

$login = new Login;

但它仍然给我错误

致命错误:在第 16 行的 /login/securePage.php 中的非对象上调用成员函数 getFirstName()

4

3 回答 3

1

可能是几件事:

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

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

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

此外,资源变量(数据库句柄、文件句柄等)将无法在会话变量发生的序列化/反序列化中幸存下来。

于 2011-08-26T03:32:31.307 回答
0

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

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

于 2011-08-26T13:38:37.330 回答
0

我认为这与变量名有关。如果我没记错的话,在您的securePage.php 中,代码如下:

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

它应该是:

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

希望能帮助到你。

于 2011-08-26T14:09:02.837 回答