おぞねです。
前回、データベースへの接続ができたので、データベースを用いてログインページを作成しました。
ログイン後のページはログイン状態を管理する必要がありますが、 HTTPはステートレスなので仕組みを作る必要があります。
Cookieを用いることで ログイン状態を維持できることは何となく知っていたのですが、調べたところセッションの管理が簡単にできそうだったので実装しました。
<!-- sessioncheck.php -->
<?php
session(); //セッションを使う宣言
$userName = $_SESSION['username'];
$password = $_SESSION['password'];
if($userName != "" && $password != ""){
try{
$prepare = $dbh->prepare('SELECT user,pass from users;');
$prepare->bindvalue(1,$userName,PDO::PARAM_STR);
$prepare->execute();
$result = $prepare->fetch();
if(strcmp($userName,$result[0]) == 0 && strcmp($password,$result[1]) == 0){
echo "セッションOK";
}
else {
header('Location: failedlogin.php');
}
} catch (PDOException $e) {
$error = $e->getMessage();
echo "<p>DB読み込み失敗</p>"."$error";
}
}
else{
header('Location: nosession.php');;
}
?>
$session[username], $session[password] という連想配列にフォームから受け取ったユーザ名とパスワードが格納されている状態です。
上記2つとDBのデータを比較し、問題なければページの内容を表示します。
もしデータ比較し異なっていた場合、ログイン失敗のページに遷移します。
そもそもセッションが存在しない場合は、セッションが無い旨を伝えるページに遷移します。
ログイン状態を維持する必要がある場合、sessioncheck.phpを実行させるようにしております。
これで意図した動きになりましたが、もっと効率いい方法があればご教授くださいm(_ _)m
ではまた。