2011-02-10 2 views
4

背景:
私はPHP5.3で構築された新しいプロジェクトの出発点です。セッションを最初にデータベースに保存できるようにセッションを処理する方法を検討し始めました。すべてのセッション管理を個別のライブラリに分けて、memcached別のセッションデータベースサーバーなどに簡単に移行することができます。PHP5のセッション - 組み込みのセッションかどうか

私は、良いアプローチになるのか混乱しています。PHPバージョンに依存してセッションを処理する方法についてはオンライン上でさまざまなアイデアがたくさんあります。

質問:
は、ここで私が最も適切であると考えていたオプションです。どちらを使うべきですか?なぜですか?考慮すべき他の選択肢はありますか?

オプション1:
session_set_save_handlerを使用し、ネイティブ(ビルトイン)最大限にPHPのセッション処理を活用するために、各セッションのイベントのためにカスタム関数を作成し、まだデータベースにセッションを保存します。セッションは$_SESSION['identifier'] = 'value';のように書かれます。

オプション2:
PHPのセッションとは何の関係もないし、ちょうど私のデータベースにsessionsテーブルに話し任意のデータベースモデルとして作用する完全なセッションクラスを構築します。セッションは$this->sessions->write('identifier', 'value');のように書かれます。

答えて

2

私はあなたが後者のルートを取ることをお勧めしますが、クールな捻りを持っています。

Sessionクラスを作成し、アダプタパターンを使用してDatabaseSessionCookieSession具象クラスを拡張します。

session_save_handlerを上書きすることは、私の正直な意見ではあまりにも多くのハックのようです。

ラッパークラスを介してすべてのセッション関連のやりとりをルーティングすることで、プロジェクトがますます大きくなるにつれ、より柔軟性が得られます。このような

何か:

​​

使用法:

$database_session = new Session(new DatabaseSession()); 
+0

"head" 'Session'クラスは、別々に呼び出されたときにあなたの意見でPHPセッションに保存されますか? – Industrial

+0

@Industrialいいえ、抽象スーパークラスにすぎません。 –

+2

re 'session_save_handler':私はそれをハックと呼んでいないでしょう。 http://uk.php.net/manual/en/function.session-set-save-handler.php – Piskvor

8

$_SESSIONスーパーグローバルは、実際にはPHPでかなり良い機能です。

ソフトウェアソリューションの最終的な結果によっては、サードパーティのユーザーは、バックグラウンドで魔法を実行するカスタムセッションハンドラを使用して、このスーパーグローバルに書き込んだり読むことができます。

Suhosinで利用可能なセキュリティ強化機能もあり、セッションストレージを自分で開発する際に「気にする必要はありません。

関連する問題