我在 PHP 中编写一个简单的脚本,文件很少,在"loginForm.php"中,我有代码:
<?php
session_start();
$login = $_GET['login'];
$password = $_GET['password'];
$remember = $_GET['remember'];
include_once("login.php");
$userAccount = new UserAccount($login, $password);
$logged = $userAccount -> isLogged();
(...)
并在文件"照片.php"中:
global $userAccount;
$login = $userAccount -> getLogin();
是什么给了MI一个错误:
在非对象上调用成员函数 getLogin()
我也尝试了$GLOBALS - 相同的结果。
全局变量不能跨请求工作,但具有文件范围。
全局变量的典型用法,如果有一个跨不同范围可访问的变量(通常在同一文件中函数。
例如在文件 1 中.php
<?php
$value = 1;
echo $value; // prints '1'
function f1() {
global $value;
$value++;
}
echo $value; // prints '2'
function f1() {
$value++;
}
echo $value; // prints '2'
?>
若要跨请求使用变量,请使用会话。
在 PHP 中创建会话的最安全方法
在 PHP 会话中存储对象
好的,现在我做到了:
1)在AJAX请求文件中,我创建了一个类用户帐户的实例,该实例将存储在$_SESSION数组中
<?php
include_once("login.php");
session_start();
$login = $_GET['login'];
$password = $_GET['password'];
$rememberMe = $_GET['remember'];
$userAccount = new UserAccount();
$userAccount -> LogIn($login, $password);
$logged = $userAccount -> isLogged();
$_SESSION['userAccountClassObject'] = serialize($userAccount);
2)在静态(非AJAX请求)文件"photo.php"中,它工作正常:
<?php
include_once("login.php");
$user = unserialize($_SESSION['userAccountClassObject']);
$login = $user -> getLogin();
3)但是在其他AJAX请求文件中 - addComment.php不幸的是不起作用:
<?php
$id = $_GET['id'];
$comment = $_GET['comment'];
session_start();
include("login.php");
$user = unserialize($_SESSION['userAccountClassObject']);
$login = $user -> getLogin(); // Fatal error