後期第05回 - oddmutou/jugyo-2025kyototech GitHub Wiki
PHPのセッション機能を使ための準備
PHPにはセッション管理用の機能が標準で搭載されています。
これまでの授業では学習のためにセッション機能を独自で実装してログイン機能を作りましたが、このPHPのセッション機能を用いるように書き換えてみましょう。
PHP標準のセッション機能でもデータの保存先にRedisを使うことができます。まずそれの設定を行いましょう。
php.iniについて
PHP標準のセッション管理機能についての設定は、PHPの設定ファイル php.ini で行います。今回それの管理をきれいにしていきましょう。
前期第11回授業の演習2 にて、 php.ini を設定する必要がでてきて、DockerfileのCMDで直接ファイルに書き込んでいました。
設定が増えてくる場合は、別途 php.ini 単独のファイルをコンテナ外に予め用意して(=git管理下に置いて)、そこからコンテナビルド時に読み込むようにしたほうがよいです。(一般的にはそうします)
ではまず既存の php.ini の設定を別ファイルにしてみましょう。今回は Dockerfile や compose.yml と同じディレクトリに設置します。
Dockerfile を編集し、COPY を使って、 php.ini をホストからコンテナイメージ内に持ってくるようにします。
Dockerfile の中身: https://github.com/oddmutou/jugyo-2025kyototech/blob/3399ce2fd48e57eaa36220502ffd54a38610bbbf/koki_05/Dockerfile
php.ini の中身: https://github.com/oddmutou/jugyo-2025kyototech/blob/3399ce2fd48e57eaa36220502ffd54a38610bbbf/koki_05/php.ini
直接書き込んでいたのを、別ファイルに分ける、ということです。
php.ini を書き換えてPHPの標準セッション機能でRedisを使うように設定する
php.iniでの設定方法は phpredisのreadme にも書いてあります。やってみましょう。
いつもながらDockerfileの内容やそれが依存しているものを変更した際のビルドし直し (docker compose build) も忘れずに。
php.iniの設定例: https://github.com/oddmutou/jugyo-2025kyototech/commit/aac54c74d54ca8eba70999bb2f0134304dfd354d
演習1
既存コードを修正し、PHP標準のセッション管理機能を使うように、かつRedisにセッション情報を保存するようにしてみましょう。
具体的には、既存のログインまわりの処理 (public/login.php や public/login_finish.php) を、PHPの標準のセッション管理機能を用いて書き換えてみましょう。
PHPの公式ドキュメントを参考にしましょう。 https://www.php.net/manual/ja/session.examples.basic.php
redis-cliを使って、Redisにセッション情報があることを必ず確認しましょう。
実装例: https://github.com/oddmutou/jugyo-2025kyototech/commit/448b1997e44349aa2d924aa2d939a55630f4f738
演習2
PHPにはパスワード暗号化用の関数が標準で搭載されています。
暗号化するには password_hash 関数を、その暗号化した値を使ってパスワードの確認をするには password_verify を使うようにするだけで、ストレッチングやソルトの追加を自動で行ってくれます。
これまでの授業で理解を深めるためにパスワード暗号化を独自で実装しましたが、このPHPの標準の機能を用いるように書き換えてみましょう。
実装例: https://github.com/oddmutou/jugyo-2025kyototech/commit/11b7d2d514a3c8cccec82b8a91b86ecac299aa12