我有一个PHP页面和会话,我在每个站点上启动会话,但这不起作用。 我正在用
设置会话(我将课程设置为会话)}else if(isset($_POST['username']) and isset($_POST['password'])){
$account = new Account;
$password = hash('sha256', $_POST['password']);
$account->setTheAccount($_POST['username'],$password);
$acc_data = $account->getDatabaseAccounts('root','','schoolpage','localhost','accounts');
$acc_status = $account->isAccountTrue();
if ($acc_status==true){
$_SESSION['account'] = $account;
echo 'true';
header('Location:panel.php');
}else{
echo 'false';
}
}
并通过以下方式访问:
if (isset($_SESSION['account'])){
$account = $_SESSION['account'];
if ($account->isAccountTrue() == true){
echo 'XD';
}
}
但它不起作用。 我不知道为什么会话不起作用。
class Account{
private $acc_data,$username,$password;
function setTheAccount($usernamei, $passwordi){
$this->username = $usernamei;
$this->password = $passwordi;
}
function getDatabaseAccounts($dbUser,$dbPassword,$dbName,$dbHost, $dbTable){
$pdo = new PDO('mysql:host='.$dbHost.';dbname='.$dbName, $dbUser, $dbPassword);
$this->acc_data = $pdo->query('SELECT * FROM `'.$dbTable.'`');
}
function isAccountTrue(){
$acc_status=false;
foreach ($this->acc_data as $i) {
if ($i['username'] == $this->username and $i['password'] == $this->password){
$acc_status = true;
}
}
return $acc_status;
}
function isUserLogged(){
}
}
帐户类var转储
truearray(2) { ["login"]=> bool(true) ["account"]=> object(Account)#1 (3) { ["acc_data":"Account":private]=> object(PDOStatement)#3 (1) { ["queryString"]=> string(24) "SELECT * FROM `accounts`" } ["username":"Account":private]=> string(5) "admin" ["password":"Account":private]=> string(64) "4813494d137e1631bba301d5acab6e7bb7aa74ce1185d456565ef51d737677b2" } }
答案 0 :(得分:1)
放
error_reporting(-1);
ini_set('display_errors', true);
在页面顶部启用php错误,您将看到您无法将资源,PDO实例,PDOStatement等序列化为会话。
您无法序列化帐户$acc_data
,因为它是PDOStatement的一个实例。您无法序列化或反序列化PDOStatement实例。
更改
$this->acc_data = $pdo->query('SELECT * FROM `'.$dbTable.'`');
到
$this->acc_data = $pdo->query('SELECT * FROM `'.$dbTable.'`')->fetchAll();
然后删除您的会话并重试。
答案 1 :(得分:1)
要在$ _SESSION中存储对象,您必须对其进行序列化,然后对其进行反序列化以调用方法 - > isAccountTrue(),否则只需存储结果:
$_SESSION['accountValid']=$account->isAccountTrue();
...
if($_SESSION['accountValid']===true){
// do stuff
}