我還在重做,擺脫了我的代碼中的舊mysql_ *命令。我試圖把我的會話登錄表單的舊代碼,這是我得到迄今:如何在PDO中使用會話?
public function login($user, $password)
{
if (!empty($user) && !empty($password))
{
$password = $web->doHash($user, $password); // in this function is (return sha1(strtoupper($user).':'.strtoupper($password))
$stmt = $db_login->prepare("SELECT * FROM account WHERE username=:user AND pass_hash=:password");
$stmt->bindValue(':user', $user, PDO::PARAM_STR);
$stmt->bindValue(':password', $password, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->rowCount();
if ($rows > 0)
{
$results_login = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION['user_name'] = $results_login['username'];
$_SESSION['user_id'] = $results_login['id'];
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
之後,如果用戶登錄的網站我使用的檢查:
public function isLogged()
{
return (!empty($_SESSION['user_id']) && !empty($_SESSION['user_name']));
}
但似乎 - 這函數返回總是空的,因爲$ _SESSION不存在於PDO中?當然,註銷在這種形式用在我的網站:
public function logout()
{
unset($_SESSION['user_id']);
unset($_SESSION['user_name']);
}
但我認爲PDO具有處理會話不同的方式?我沒有找到任何這樣的東西,我可以在PDO中添加$ _SESSION,並且更改代碼很多?
我在我的web項目中使用變量$_SESSION['user_name']
和$_SESSION['user_id']
。
摘要:
1)如何在PDO中正確使用會話?
2)有什麼用$stmt->fetch(PDO::FETCH_ASSOC);
和$stmt->fetchAll();
之間的區別謝謝。
+1 *。現在閱讀你的問題:) –
PDO和會話是PHP的2個無關特性。他們可以並且通常可以共存。你是否登錄函數返回true,仍然會話變量是空的?你事先調用了session_start()嗎? –
我沒有叫session_start() - 我應該把它放在哪裏?我只是__構建,但我刪除了它。 – Byakugan