PHP ログインシステムについて
お世話になります
現在ローカルで下記PHPのテストを行っています
PHP初心者の為、セキュリティ面並びに不具合が心配で書き込みさせて頂きました
恐れ入りますがおかしな点がないかチェックして頂けませんでしょうか
宜しくお願いいたします
データベースのバージョンはMySQL 5.5です
*****************************************
<?php
session_start();
$error_message = "";
if (isset($_POST["login"])) {
$id = htmlspecialchars($_POST['id']);
$password = htmlspecialchars(base64_encode(pack('H*', sha1($_POST['password']))));
$_SESSION['id'] = $_POST['id'];
$_SESSION['password'] = $_POST['password'];
$db = mysql_connect("***","***","***");
if (!$db) {
die('接続失敗です。'.mysql_error());
}
mysql_set_charset("utf8");
$db_selected = mysql_select_db("***", $db);
if (!$db_selected){
die('データベース選択失敗です。'.mysql_error());
}
$result = mysql_query("SELECT * FROM ***");
if (!$result) {
die('クエリーが失敗しました。'.mysql_error());
}
function x($result) {
return mysql_real_escape_string($result);
}
while ($row = mysql_fetch_assoc($result)) {
if($id == $row['id'] && $password == $row['password']){
header("Location:./instance.php");
}
}
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
$error_message = "ユーザ名もしくはパスワードが違っています。";
}
?>
<html>
<head><title>ログイン</title>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
</head>
<body>
<?php
if ($error_message) {
print '<font color="red">'.$error_message.'</font>';
}
?>
<form action="login.php" method="post">
ID:<input type="text" name="id"><br />
PASS:<input type="password" name="password"><br />
<input type="submit" name=login value="認証">
</form>
</body>
</html>
補足
>延長するくらいなら最初からセッション時間を長く設定すればいいのでは? たしかにセッション時間を長く設定した方が手っ取り早いと思い、 phpファイルの冒頭に下記を指定してみましたが、 反映されずに、またまた迷走中に陥りました。 ini_set("session.gc_maxlifetime",86400); ini_set("session.cookie_lifetime",86400); ini_set("session.gc_probability",1); ini_set("session.gc_divisor",100);