PHPでクッキーとセッション処理
HTTPを使ったWebサービスを構築する場合、クッキー(Cookie)というモノを使う必要があるらしく、少し調べてみました。(Cookieの基本的な仕組みに関してはココがわかりやすかったです)
クッキーを使わないと、異なるURLにジャンプした時に以前の情報を保持できなかったりします。保持できないと「ログイン処理を行った」という情報も忘れてしまうので、Webサービスの画面遷移の度に、ユーザ認証させるような最低な操作感になったりします。
しかし、Cookieというのは基本的にクライアント(ブラウザ)側に変数を記憶してもらうという仕組みなので、クライアント側だけの変数管理ではログイン管理は難しく、結局サーバ側にセッションID(一時的なログイン成功した証明、DB内部のUIDなんか外に出すわけにはいかないので)用のDBテーブルが必要になったりするので、セッションID管理用のロジックを考えたりDB操作が必要になったりで色々面倒です。
それらを踏まえて思いつく管理方法例は↓みたいな感じになると思います。
クッキーを使ったログイン管理の処理例
- Webサービスにアクセスする、有効なセッションIDクッキー(有効期間内でDB内に存在する)を持ってればWebサービスを提供、無ければログインを促す(2へ)
- ログイン処理をさせる、ユーザとパスワード値があればセッション値(有効期間付き)を生成し、DBに登録する(3へ、既にユーザに関連付けられた期限切れのセッション値がある場合は更新する)
- セッション値をクライアント(ブラウザ)に保存してもらい、次回アクセス以降はその値を使ってもらう(1へ戻る)
流れ的にはこんな感じなんですが、この一連処理を実装するのって結構面倒です。
しかしPHPにはセッション管理用の関数が提供されているので、それを使う事で簡単にセッション管理する事ができます。(セキュリティ的に「PHPのセッション管理が実用に耐えうるか」って話もありますが、そこら辺まで調べられてません。セッションIDの長さをあげて有効期間を短くすれば、セキュリティはより高くなると思います)
ちなみに上の管理例でUID(ユーザID)とセッションIDの関連付けを1:1にすれば、ニコニコ動画のような1クライアントのみログインを許可するという挙動に(多分)なります。