【猫でもできる】PHPでログイン機能を付けてみた

プログラミング

こんにちはときえのです。
今回は、私情でPHPを触る機会があったのでログイン機能の実装方法でも書いておきます。
猫でも理解できる難易度なのでリラックスして見てってください!

スポンサーリンク

必要なもの

PHPとMysqlが使えるサーバー

Mysqlには、id(PRIMARY)とpassを追加できるテーブルがある前提です。

まずはHTMLを整える

残念ながらどれだけPHPを書きたくても、やはり最初に書くのはHTMLです。
とりあえずHTMLを書いていきます。

<h1>ログイン</h1>
<form action="/userinfo.php" method="post" name="login_form">
	<table>
		<tr class="">
			<p class="form_caution">全項目が必須入力です。</p>
		</tr>
		<tr class="">
			<th><label for="id">ID</label></th>
			<td><input type="text" name="id" required></td>
		</tr>
		<tr class="">
			<th><label for="pass">パスワード</label></th>
			<td><input type="password" name="pass" required></td>
		</tr>
	</table>
	<div>
		<?php
			<input type="submit" value="ログイン">
		?>
	</div>
</form>
<p><a href="/registar">初めての方は、会員登録</a></p>

はい、とってもシンプルですね。


PHPでSQL送信する

次に、PHPを使ってデータベースに情報を問い合わせます。
コードはこんな感じ!HTMLのformタグのactionに書いた先のファイルに書き込みます。

session_start();

$pdo = new PDO('mysql:host=Mysqlがあるサーバー名;dbname=データベース名;charset=utf8','ユーザー名','パスワード');


function h($s) {//入力内容を無害化するセキュリティ対策
	return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
}

$id = h($_POST['id']);
$pass = h($_POST['pass']);
$sql = "select * from ユーザーリスト where id=:id";
$stmt = $pdo->prepare($sql);
$params = array(':id' => $id);
$res=$stmt->execute($params);
if($res){
	$user_data = $stmt->fetch();
}

if(password_verify($pass,$user_data["pass"])){
	//ログイン成功
	$_SESSION['id'] = $id;
	$setcookie('id', $id, time() + 60 * 60 * 24 * ログインを維持したい日数);
}

なんと!!!これだけで完成です!!!
ね?簡単でしょ?


どうやってログインを検出するの?

もうここまで来たら後は簡単です。

if(isset($_SESSION['id']))
	//ログインできてるので、マイアカウントを表示してみる
	echo "<a href=\"/user/".$_SESSION['id']."\">マイアカウント</a>";
	//これで /user/ユーザー名 へのリンクが貼れる
else{
	echo "はよログインしろやボケ";
}

ログインの検出はこれだけです!!!!!


セキュリティ対策関連

今回は猫でもわかるようにシンプルさだけを追い求めてコードを書きましたが、セッションにIDがそのまま書いてあるから乗っ取られたら終わるだとか、クッキーのIDを書き換えられたらハッキングできるとか、シークレットIDやワンタイムIDなるものを発行してないだとかで本番でこんなの使ったらめちゃくちゃ悲惨なことになりますw
あくまでこのコードは最小限のログイン実装です!
セキュリティ関連は、またいつかお話します!

最後までありがとうございました!

コメント

タイトルとURLをコピーしました