こんにちは。
私は現在、主にCodeIgniter(以下CI)を用いて簡易的なグループウェア(自分とその仲間数人で使うもの)を開発しています。
グループウェアには必須のログイン機能を実装しようと、CIに付属している(?)セッションライブラリを用いて(セッションデータはMySQL上に保存)ぼちぼち開発していました。
いろいろな参考サイト様等を見ながら、とりあえず一通りのログイン機能は実装しました。
だいたいの仕組みとしては以下の通りです。
- LoginコントローラにPOSTして認証
- 認証成功ならセッションを開始
- CIセッションのユーザーデータにユーザーIDを入れておく
この仕組みでもとりあえず一つの端末から利用する上で問題はないのですが、ログアウト機能を実装しようとした時に問題が発覚しました...
CIのセッションに用意されているセッション破棄関数($this->session->sess_destroy();)を用いてセッションの破棄は行えるのですが、当然ながらこれはセッションIDを基にした破棄です。
そのため、ユーザーが複数の端末からログインしていた場合に、
・他端末からのログイン状況を知ることができない。
・セキュリティ上必要な「他のセッションを全て破棄」ということができない。
という問題点があります。
安全なWebアプリケーションの作り方という本を読んだところ、セッションデータの中でユーザーIDをDBカラム上で独立させ、WHERE user_id = ?
と指定してセッションデータを破棄するように書いてあります。
しかしながらCIのセッションライブラリでは、開発者が設定したデータ(userdata)がDBの一つのカラムにごちゃ混ぜにされているため、user_idを指定してセッションを削除という難しいことはできないように思います。
そこで、あまりこのセッションライブラリを改変せずに**「他のすべての場所からログアウト」**機能を実装したいのですが、どのような方法があるのでしょうか。
どなたかこのような分野に詳しい方、宜しくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。