セッションを使ったログインページでのエラー
前にもセッションを使ったログインページについて質問したものです。
上記の通りセッションを使ったログインページを作っております。
前回このソースを載せたときセキュリティー的にとても危険だというご意見をいただきました。何分まだ初心者ですのでどうかご了承ください。
ソース
/*ログインのページは省略しました。ログイン後ID・パスワードが正しいか、そして訪問者がログインせずにこのページに直接アクセスした際にログインページにジャンプするようにするようにするプログラムです*/
<?PHP
if (!isset($user) || !isset($pass)) {
header( "Location: loginPage.php" );
}
elseif (empty($user) || empty($pass)) {
header( "Location: loginPage.php" );
}
else
{
$user = addslashes($_POST['username']);
$pass = md5($_POST['password']);
$dbHost = "localhost";
$dbUser = "*****";
$dbPass = "*****";
$dbDatabase = "mysql";
$db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database.");
mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database.");
$result=mysql_query("select * from users where username='$user' AND password='$pass'", $db);
$rowCheck = mysql_num_rows($result);
if($rowCheck > 0){
while($row = mysql_fetch_array($result)){
session_start();
session_register('username');
echo 'Success!';
header( "Location: checkLogin.php" );
}
}
else {
echo 'Incorrect login name or password. Please try again.';
}
}
?>
このようなプログラムを作ったのですが、ちゃんとパスワードをいれても、ちゃんと認証されずに、ログインのページ戻されてしまいます。
おそらく
if (!isset($user) || !isset($pass)) {
header( "Location: loginPage.php" );
}
elseif (empty($user) || empty($pass)) {
header( "Location: loginPage.php" );
}
の部分がおかしいのかと思いますがどう変えたら良いのかよく分かりません。また、おかしいと思った部分を削除したら普通にログインはできるのですが、今度は一度ログインしても他のページに移動した後もう一度このページに行くと、もう一度ログインしないとアクセスできなくなりました。
まとめると、お聞きしたいことは、2つです。
(1)紹介したのプログラムでログインしてもちゃんとログインが認証されない。これを解消するにはどうすればいいのか?
(2)ユーザーがログインした後もう一度このページにアクセスした場合もう一度ログインさせなくてもいいようにすればどうすればよいのか。
もし可能でしたら、解決するためのプログラムを(さらに可能でしたら紹介したプログラムを生かした形で)添えてアドバイスしていただけないでしょうか?よろしくお願いいたします。
補足
参考URLありがとうございます。しっかり読んでみます。 <先にロジック部分で表示したい内容を確定し、その後、複数用意したデザイン部分へデータを渡す というのはまずPHPで、「ログインしている場合」と「していない場合」のプログラムをかいて、 複数のHTMLページごとにそのプログラムを、ログインしていたらB、していなかったらC と呼び出すということでしょうか?