4

Codeigniter で配列をセッション データに保存するときに問題が発生しました。

var_dump($this->session->userdata('data')); // output is boolean false

$array = array(0 => 'abc', 1 => 'def', 2 => 'ghi');
$this->session->set_userdata(array('data' => $array, 'name' => 'my_name'));

var_dump($this->session->userdata('data')); // output is 0 => 'abc', 1 => 'def', 2 => 'ghi'

ページが読み込まれるたびに「userdata('data')」が失われますが、他のユーザーデータは問題ありません。これは、この配列のみが失われることを意味します。私はそれがうまくいくと100%確信しています.多くの変更を加える前に私のために働いていたので、今は解決策を見つけることができません.

ありがとう。

4

3 に答える 3

7

私は何が問題なのかを見つけました。Codeigniter にはセッションにいくつかの制限があります。私の配列は大きすぎました。 詳細はこちら

于 2012-07-10T14:32:52.083 に答える
0

データベースを使用する必要があります。4kb の制限は、ブラウザの Cookie サイズの制限です。サーバー上の (同じドメインの) オブジェクトへのすべての要求ヘッダーがこの Cookie を送信するため、Cookie とセッションを小さくしておくことは一般的には良い方法です。

また、データベース セッション テーブルに関する CI のヒントとして、タイプを MEMORY に設定すると、セッションがディスクではなく RAM に保存され、サイトが高速になります。

SQL

CREATE TABLE IF NOT EXISTS  `ci_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)
);

CI 設定 (application/config/config.php 内):

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;
于 2014-11-06T10:42:51.683 に答える
0

ナビゲーターで Cookie が無効になっているようです。

于 2012-07-10T13:28:43.967 に答える