19

私はCodeIgniterシステムをしばらく使用していますが、欠点があります。それが教えてくれたことに感謝していますが、今は新しい非codeigniterプロジェクト用のライブラリが必要なので、どのライブラリに正しいものがあり、どのライブラリが正しくないかについてのアイデアを探しています。必要なものをすべて入手するには、おそらくいくつかのライブラリから断片を取得する必要があります。

Kohana PHPセッションライブラリを調べたところ、データアクセスのために$ this-> sessionに変更を強制する代わりに、$_SESSIONスーパーグローバルを使用するネイティブPHPの方法に戻る方法が気に入っています。

とにかく、私が混乱しているかもしれない他の良いセッションライブラリがあるかどうか知りたかったのです。CRUDだけでなく、セッションで処理しなければならないことがたくさんあります。

  • 非Cookieベースのセッションパッシングのサポート(つまり、FacebookまたはFlashアップローダー)
  • 次のページの読み込みの間だけ持続し、その後自動削除される「フラッシュデータ」。
  • $_SESSIONまたは$this->sessionと連携して、プログラマーが既存のコードを変更する必要がないようにします。
  • ページの途中でIDを変更する場合に備えて、新しいセッションID(つまり、session_id('new id'))の設定をサポートします。
  • データが追加または削除されるたびにではなく、ページ要求の最後にすべてのデータを保存します(余分なDBクエリを保存します)。
  • ストレージ用のファイル、Cookie、またはデータベースの使用をサポートします。(またはmemcachedがいいでしょう)
  • セッションハイジャックの場合にアクセスを拒否しようとします。(IP、ユーザーエージェント、または指紋

CodeIgniterとKohanaのセッションライブラリのロジックを少し時間をかけて調べたところ、それぞれがページのセッションを開始および終了する方法について次のことがわかりました。

/**************
** Kohana Sessions
**************/
If not native file storage {
    session_set_save_handler to the storage type (DB, cache, cookie...)
}

set the session_name() so php knows what cookie value to check

start session

/****** Saving ******/

session_write_close() which calls the given handler


/**************
** CI Sessions
**************/

Try to read_session() -> {
    session = Get cookie (if using cookies will also contain data)

    if(database) { 
        session .= pull data from database
    }

    checks if valid...

    $this->userdata = session data

} else { 
    create a new one
}

/****** Saving ******/

session data is serialized either way

if(cookie) {
    save cookie with serialized data and params like "last_activity"
}
if(database) {
    save serialized data in db and session in cookie
}
4

4 に答える 4

5

ご覧になりましたZend_Sessionか?

  • PHP設定を使用してURL経由でセッション識別子を渡すことができます
  • 特定のセッション変数を時間またはホップ(リクエスト)で期限切れにすることができます
  • $_SESSION他のアプリへの移行はそれほど簡単ではなく、使用するときに混乱するのはあまり良くないと思いますZend_Session
  • Zend_Sessionセッションデータを保存するためのアダプターベースのアプローチがあります。DB用の保存ハンドラーが含まれていますが、そのアーキテクチャーではカスタムハンドラーを渡すことができます。
  • Zend_Sessionセッションの有効性をチェックするバリデーターをサポートします。ここでも、検証のためにカスタムオブジェクトを渡すことができるオープンアーキテクチャがあります。
  • セッションをロックすることができます。別名、読み取り専用にすることができます
  • 同じセッション名前空間の複数のインスタンスのインスタンス化を防ぐことができます
  • Zend_Sessionさらに、セッションIDの再生成、remember-me-cookiesの発行、remember-me-cookiesの取り消しなど、さらに多くの発見があります。
于 2009-07-11T20:28:00.473 に答える
3

ストレージにMySQLを使用する、PHPのデフォルトのセッション処理関数のラッパーであるZebra_Sessionをご覧ください

  • PHPのデフォルトのセッション処理関数のラッパーとして機能しますが、セッションデータをフラットファイルに保存する代わりに、MySQLデータベースに保存するため、セキュリティとパフォーマンスが向上します。

  • これは、PHPのデフォルトのセッションハンドラーのドロップインであり、一見無意味な代替品です。PHPセッションは、ライブラリを使用する前と同じ方法で使用されます。既存のコードを変更する必要はありません!

  • 行ロックを実装し、複数の同時AJAXリクエストがあるシナリオでデータが正しく処理されるようにします

  • 1つのファイルのみ

  • 成熟し、高度に最適化され、絶えず開発されています

  • 非常に優れたドキュメント

于 2012-07-29T10:06:15.410 に答える
3

OK、カスタムの非$_SESSIONベースのcodeigniterlib、2つのKohanaおよびZend lib($ _SESSIONを使用)、および他のプロジェクトからの他のいくつかのセッションライブラリを調べた後、私は自分の問題に対する答えを構築すると信じています。上記のすべてを満足するもの(フラッシュデータを除く)。

誰かがそれを使用したり、独自のライブラリを構築しているときにそれを読みたい場合のコードは次のとおりです。全体を徹底的に説明するコメントをたくさん残しましたので、フィードバックをいただければ幸いです。トークン、フラッシュベースのアップローダー、Cookie、5分ごとのセッション再生(または設定したもの)と古いセッションの削除をサポートし、データベース、ファイルシステム、memchache、またはその他の必要な形式でのセッションの保存をサポートしますセットする。

于 2009-07-15T21:37:28.137 に答える
3

これはCIで使用できます:EchoSession

于 2009-07-13T14:22:54.600 に答える