書籍「パーフェクトPHP」のフレームワーク拡張について


今回、パーフェクトPHPという書籍で解説しているフレームワークの拡張について質問します。

上記書籍のサンプルURLです。
http://gihyo.jp/book/2010/978-4-7741-4437-5/support

上記の「ミニブログ」サンプルでは、
セッションをテキストファイルにて管理していると思われます(サンプル内のSession.phpから推測)

このテキストファイルで管理してあるセッションをデータベースにて管理したく、
「Session.php」のSessionクラスを改良したく存じます。
しかし、どう改良すればセッションをデータベース化できるか分かりません。

データベースの構造は、
「user」テーブルにセッション変数(session_id)とCSRF対策の変数(csrf_id)のカラムを追加して管理したく思います。

(例)
「user」テーブルのカラム一覧
id
user_name
password
session_id(追加)
csrf_id(追加)
create_at

「Session.php」を改良してセッション管理できるコードを記載していただければ幸いです。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2017/02/04 15:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tobeoscontinue No.1

回答回数220ベストアンサー獲得回数59

ポイント500pt

> このテキストファイルで管理してあるセッションをデータベースにて管理したく、
>「Session.php」のSessionクラスを改良したく存じます。
Session.phpはphpのセッション関数をラップしているだけです。
phpのセッション管理はデフォルトでテキストファイルを使っています。
これをデータベースにて管理することは可能ですがsession_set_save_handlerを書く必要があり、敷居が高いように思います。
http://php.net/manual/ja/function.session-set-save-handler.php

sqlite や memcache そして memcached などphpの拡張モジュールとして用意されているようです。

> 「user」テーブルにセッション変数(session_id)とCSRF対策の変数(csrf_id)のカラムを追加
アカウント管理で使用している「user」テーブルに追加するのであればある程度は可能です。
creare_table.sqlにsession_idとcsrf_idを追加し実行します。
既にDBがあるのならALTER TABLEで追加します。
UserRepository.phpのinsertは変更する必要があり、どう変更するかで更に修正する箇所が増えていくでしょう。

session_idはregenerateされることがあるので同期するのが面倒のように思います。

session_id、csrf_idは本当にテーブルに保存する必要があるのでしょうか。
セッション変数ではダメなのでしょうか。

もっと絞らないとコードは難しいように思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません