2013-01-02 8 views
5

ログイン後にcodeigniterに私はすべてのデータをセッションに保存し、フォーラムコントローラにリダイレクトしています。しかし、私はフォーラムのコントローラですべての価値を失っています。codeIgniter:ログイン後にセッションデータを失う

セッションからいくつかの値を減らしてみると、完全に機能します。

私の質問はです - なぜこれが起こっていますか? codeIgniterにセッションに格納する値の上限はありますか?

でも私は

redirect('forum', 'refresh'); 

のように見つかりましたが、それが機能していない検索してみてください。私のプロジェクトは半分になっていますので、codeignterの "PHP Native Session class"は使えません。

+0

ネイティブセッションクラスを使用できますが、シンプルに統合されています。 1つのメソッドをクラスの最大値に追加する必要があります。 – jadkik94

+0

@ jadkik94:すでに言及したように、私はすでにモジュールのほとんどを開発していないので、ネイティブセッションクラスを使用することはできません。 –

+0

設定を変えてセッションをデータベースに保存します。あなたの時間と努力のために、http://ellislab.com/codeigniter/user-guide/libraries/sessions.html – mallix

答えて

1

説明:デフォルトのCodeIgniterにより がブラウザによってサイズが2キロバイト、4キロバイトの上限を有するクッキーにセッションデータを格納します。 セッションに4KBを超えるデータを保存しようとすると、問題が発生し始めます。

ソリューション: 最も簡単な解決策は、テーブルを設定し、設定のカップルを変更するDB.itの問題でセッションを保存するためのDB.The CodeIgniter session documentation詳細にプロセスをセッションの詳細を格納することですパラメーター。以下は、設定ファイル(アプリケーション/設定/ config.phpの)変数以下

アップデートをDO-する必要が変更されている:

セッション -

CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL, 
ip_address varchar(45) DEFAULT '0' NOT NULL, 
user_agent varchar(120) NOT NULL, 
last_activity int(10) unsigned DEFAULT 0 NOT NULL, 
user_data text NOT NULL, 
PRIMARY KEY (session_id), 
KEY `last_activity_idx` (`last_activity`) 
); 

を格納するための新しいテーブルを作成し

$config['sess_use_database'] = TRUE; 
$config['sess_table_name'] = 'ci_sessions'; 

詳細については、http://goo.gl/YPllj0

7

デフォルトでは、CodeIgniterはセッションデータをクッキーに格納します。クッキーの上限は4KBです。セッションに4KB以上のデータを保存しようとすると、問題が発生し始めます。

最も簡単な解決策は、おそらくセッションの詳細をDBに保存することです。 CodeIgniter session documentationはセッションをDBに保存するプロセスを詳しく説明しています。テーブルを設定し、いくつかの設定パラメータを変更することです。

+0

に感謝します。 –

4

CIセッションは、オプションの暗号化を使用してすべてをクッキーに保存します。したがって、apparentlyはその上限に達する可能性があります。これは、2Kバイトのようなものを格納する場合です。それが単なるログイン情報であれば、それは問題ではありません。もしあなたがそれ以上のものを使っているのであれば、そうしてはいけないと思います。

とにかく、私はこれと同じ問題を抱えていたので、これは問題ではないと思います(私はこれの正確な原因を覚えていません)。私が見つけた解決策は、ネイティブPHPセッションクラスを使用して、それに1つのメソッドall_userdataを追加することでした。これで、すべてのことは正常なセッションと同じように機能しました(何も変更する必要はありません)。

+0

あなたの時間と努力に感謝します。 –

+0

@ jadkik94これまでのことでしたが、ネイティブPHPセッションクラスを使用する前に、CIセッションDBテーブル(受け入れられた回答)を試しましたか?もしそうなら、それがなぜ失敗したのか理解しましたか?私の場合、それはまだランダムにセッションを失います。追加したall_userdataメソッドについて説明できますか? – Armfoot

+1

@Armfoot私はデータベースセッションを試みたとは思わない。 all_userdaraメソッドは '$ _SESSION'配列を返しました。とにかく私はCI 3.0でSessionクラス全体を改良したと思います。最新バージョンを使用している場合は、[here](http://www.codeigniter.com/user_guide/libraries/sessions.html#session-drivers)を参照してください。 – jadkik94

0

私の場合、いくつかのテスト(localhostでhttpsとhttpを使用)を行った後、エラーはその問題のために発生し、$ config ['cookie_s ecure ']ので、configで変更を試すことができます。PHP:

$config['cookie_secure'] = FALSE; // if is not under https, or true if you use https 

乾杯!

+1

よろしくお願いします。 upvoted to 0 – Dug

関連する問題