web-dev-qa-db-ja.com

CodeIgniterセッションvs PHPセッション

私はCodeIgniterに比較的不慣れで、ユーザーアカウントなどがある最初のCIプロジェクトを作成しています。過去には、この目的のために常にPHPの$ _SESSION変数を使用していました。ただし、CIには独自のセッションメカニズムがあるようです。

CIのセッションメカニズムはすべてのデータをCookieに保存しているようですか?個人的には、サーバーに保存されているすべてのデータが、PHPのネイティブセッションメカニズムのようなCookieキーでアクセスされるというアイデアが好きです。 CIのメカニズムをそのまま受け入れるべきですか?または、ネイティブPHP=セッションを使用する必要がありますか?

君たちは何をするの?

ありがとう、
マラ

44
Mala

CIでの経験では、そのセッションでいくつかの異常に遭遇しましたが、ほとんどの日常的なニーズについては、ライブラリは良好で、扱いやすいです。指摘されたように、Flashdataは非常に優れた機能です。

CIのセッションにとどまることを選択した場合、セッションをデータベースに保存し、さらにCookieを暗号化することを強くお勧めします。

$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database']   = TRUE;
$config['sess_table_name']     = 'sessions';

データベース構造は次のようになります。

CREATE TABLE IF NOT EXISTS  `sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(16) DEFAULT '0' NOT NULL,
    user_agent varchar(50) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id)
);
34
Cinnamon

マニュアルには、betterではなくbetter;-)よりも柔軟性(-===-)が記載されています

CodeIgniteセッションクラスの主な利点は、フレームワークと統合し、IPアドレストラッキングやそれが呼び出すものflashdata(セッションデータ読むとすぐに消去されます)。最初にフレームワークを使用している場合、これらのオプションは魅力的かもしれません。

いずれにしても、セッションデータをデータベースに保存することもできます。

http://codeigniter.com/user_guide/libraries/sessions.html

8

重要な情報についてはPHPセッションを維持し、重要性の低い情報についてはCIセッションを使用します。

こちらをご覧くださいwyh . http://codeigniter.com/forums/viewthread/130577/

4
shin

CIセッションにはストレージサイズの制限があります

ご承知のとおり、CIセッションは、暗号化するかどうかにかかわらず、基本的にCookieです。セキュリティに関する限り、賛否両論があります。

私の懸念はCIセッションのサイズ制限でした。基本的にはCookieとして4kbのデータしか保持できませんが、ネイティブPHPセッションはCookieに参照IDのみを保存し、すべてのセッションデータはサーバーのメモリ:これは、セッションに格納する必要のあるアイテムの数が多い場合に便利です。

より多くのアイテムを含むショッピングカート、または50を超えるトラックを含むユーザーミュージックプレイリストなどを発声します。

この情報がいつか誰かに役立つことを願っています。

乾杯..!!

1
Clain Dsilva

私はこれが古い投稿であることを知っていますが、私が見つけたものを共有する価値があると思います。

CIは(データベースストレージを使用する場合でも)Cookieベースのアプローチを使用するため、curlを介してデータを要求するリモートクライアントにデータを提供する特定のアプリで問題が発生します。一番下の行はCookieとクロスサイトスクリプティングですが、管理はできますが、うまく連携しません。

CIが提供するネイティブのSession.phpクラスを、独自のMY_Session.phpでオーバーライドすることを選択しました。これがそれほど難しくないことを嬉しく思いましたが、スクリプトが明示的にセッションIDを提供していてもCIがセッションIDを再生成していることに驚いていました。

CIマニュアルによると

ユーザーの一意のセッションID(これは非常に強力なエントロピーを持つ統計的にランダムな文字列であり、移植性のためにMD5でハッシュされ、5分ごとに再生成されます

おそらくこれをオーバーライドする方法を見つけることができますが、PHPセッションに戻るのはそれほど簡単ではないかと思います。

CIを使用する場合は、ただ考えてください。

1
Brian Hammond