登录php脚本的问题-通过会话传递对象


Problems with a login php script - passing objects through a session

我有一个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());

显示以下错误

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

然而,当我把
$login = new Login;

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

它工作!我不知道发生了什么,如果我做错了什么,因为即使我把

session_start();
不是

$login = new Login;

但是它仍然给我错误

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

可能有以下几种情况:

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

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

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

资源变量(数据库句柄、文件句柄等)也不能在会话变量的序列化/反序列化中存活。

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

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

应该是:

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

希望能有所帮助。

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

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