Pocket

さて、着々と個人開発が進んでいるわけですが、アプリケーションに関しては駆け出しエンジニアなので、色々と学ぶことが多いですが、今回初めてCakePHP4でログインセッションをRedis化してみました。そもそもセッションとは何なのかという概要から説明していきましょう。


ログインセッションとは

  • 流れ

ログインセッションよりもまずはクッキーとセッションについて勉強しておく必要がありまずが、以下二点を利用して認証を行います。

・クッキー
 ・ユーザー側のコンピュータに保存されているデータ
・セッション
 ・サーバー側に保存されているデータ

上記がログインセッションとしての流れとなりますが、ログアウトする場合はPCからのクッキーセッションidが消えて、サーバー側からもセッション情報がなくなります。なので、ログインセッションを実装しておくことで他のユーザーから勝手にアクセスされることはありません。そこでサーバー側の保存先としてデータベースや非リレーショナルデータベース(NoSQL)を利用することが多いです。ちなみにセッションファイルをサーバー上に格納してしまうとサーバーのディスクが増加してしまうのでデータベースで管理するのが良いでしょう。

また、非リレーショナルデータベースで有名なのはMemcachedやRedisとなります。Redisは単純なKey-Valueだけでなく複雑な種類のデータも扱えて、可用性を保ちつつ高速にデータを扱うことが可能です。現在はデータベースよりRedisで運用することが一般的になってきたと感じています。次はPHPがRedisへ接続するための設定等を説明していきます。


Docker/開発環境

  • docker-compose.yml

  • Dockerfile (App container)

  • php.ini 

開発環境はDockerでAppコンテナはAlpineを利用していますが、peclでredisパッケージをインストールとphp.iniにextensionを追加してredisコンテナを指定するだけで準備OKとなります。以下AppコンテナからRedisコンテナに接続できれば完璧です。

※ちなみにAmazon Linux2だとphp-pecl-redisになります。CakePHP4 Dockerでの開発環境については以下GitHubで公開しているので参考に。

https://github.com/RVIRUS0817/dev_cakephp4/tree/master/docker/dev

  • 動作確認


CakePHP4 x Redis

https://book.cakephp.org/4/ja/development/sessions.html#id7

  • app_local.php

36行目から52行目にかけてCacheとSessionを追加しましょう。hostは.envで環境変数にしているので適当に。最後にSessionでconfigのsessionを読み込むように設定するだけです。なんて簡単なのか…!あとはログインしてみよう!

  • ログイン後確認


まとめ

最近凡ミスが多いのでしっかりしないとな…これでちゃんとセッションが保たれる…!! RailsはデフォルトでDBにセッションを管理するように作られてるけど(わからん曖昧)、インフラ構築してる人はやはりElasticache/Redisを使うことが多いですね。参考に!!

次はSendGridでメール送信実装せねば!!

Pocket

カテゴリー: CakePHP

adachin

1989年生まれのSRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWS/Azureでのインフラ構築、Docker開発環境の提供、Kubernetes保守、インフラコード化、新技術の検証、リファクタリング、セキュリティ強化などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください