後期第03回 - oddmutou/jugyo-2026kyototech GitHub Wiki

やること

この授業では、セッション機能を用いて、ログイン機能を実装してみます。

ログイン機能を実装するために、先に簡単な会員登録機能も実装します。

会員登録/ログイン機能はSNSなどでもよくある機能ですよね。みなさんがよくつかうサービス、InstagramやTwitterなどの会員登録やログインのフローを思い浮かべながら進めてもらうと理解しやすいとおもいます。

(かなり簡単にパスワードの暗号化もせず進めます。暗号化については次の授業でやります。)

会員登録

まず簡単に、会員情報を保存するテーブルをデータベースに作ります。

MySQLに接続 (mysqlコンテナ内で mysql コマンドを実行) して、以下のようなSQLを実行します。

CREATE TABLE `users` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` TEXT NOT NULL,
  `email` TEXT NOT NULL,
  `password` TEXT NOT NULL,
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
);

会員情報用テーブルを作成できたら、そのテーブルにINSERTする画面、つまり会員登録フォームを作りましょう。

実際のサービスで会員登録機能を作成する際は、登録されるメールアドレスに対する所有確認作業を行いますが、この授業ではスキップします。

vim public/signup.php

内容はこんなかんじ https://github.com/oddmutou/jugyo-2026kyototech/blob/ad6f4dc73d38b09c5062c9d0a8587be0f6a001ea/koki_03/public/signup.php

会員登録完了画面も作ります。

vim public/signup_finish.php

内容はこんな感じ https://github.com/oddmutou/jugyo-2026kyototech/blob/ad6f4dc73d38b09c5062c9d0a8587be0f6a001ea/koki_03/public/signup_finish.php

ログイン

メールアドレスとパスワードを入力し送信できるログインフォームを作ります。

ログインフォームから送られてきた情報を元に、該当のメールアドレスは会員情報テーブルに登録されているか、パスワードが合っているか、をチェックします。

会員情報が存在し、またパスワードがあっている場合は、セッションにログイン情報を保持させます。

ログイン画面を作成します。

vim public/login.php

内容は https://github.com/oddmutou/jugyo-2026kyototech/blob/5dbfcbfbaf810e2dc88024b52e32f2e44c68d437/koki_03/public/login.php

ログイン完了画面も続けて作成します。現在ログインしている会員の情報を閲覧できるようにもしてみます。

vim public/login_finish.php

内容は https://github.com/oddmutou/jugyo-2026kyototech/blob/5dbfcbfbaf810e2dc88024b52e32f2e44c68d437/koki_03/public/login_finish.php

演習

演習1

今回作った会員登録画面では、同じメールアドレスで複数の会員情報を登録できてしまいます。

既に登録してあるメールアドレスで登録しようとした場合は会員登録を中断し、「既にこのメールアドレスは登録されています」と表示するように改修してみましょう。

動作例: http://54.161.112.37/signup.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/commit/01b8246f91fca2b9f4bccba9462ef759bd664cfb

演習2

ログインしている状態で、ログインしている自分自身の会員情報の「名前」(name カラム) を変更できる機能を持つ画面を作ってみましょう。

動作例: http://54.161.112.37/edit_name.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/commit/a8b1533843a0d019c82fec9af19e735759034749

演習3

ログアウト機能を実装してください。「ログアウト」というボタンのみがあるページを作って、そのボタンを押すとログアウト(ログイン状態を解除)し、ログアウト完了画面に遷移させるものを実装してください。

動作例: http://54.161.112.37/logout.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/commit/7a3dc0dbdbc50c00fe02db5e357c9217e1a6faeb

追加演習

追加の演習です。物足りないひとはやってください。全体で説明は行いません。助言、解説が必要な人は授業中に個別に聞いてください。

追加演習1

演習2の名前変更画面と同様に、ログイン中の会員が自分のパスワードを変更できる画面を実装してみましょう。

追加演習2

演習2の名前変更画面と同様に、ログイン中の会員が自分のメールアドレスを変更できる画面を実装してみましょう。

追加演習3

ログインした際にログインした履歴(ログイン先のuser_id、接続元IP、UA、日時)を保存し、ログイン後に自分自身のログイン履歴を閲覧できる機能を実装してみましょう。新しくテーブルを作ってみてください。