我有一个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);'行生成什么?(注释掉导致致命错误的调用)