php-Codeigniter-セッションデータが配列を介してデータベースに保存されない
Codeigniterで開発したログインプログラムのクレデンシャルを入力すると、セッションがMySQLデータベースのci_sessionsテーブルに保存されていないようです。
フォームに入力すると、セッションはcontroller.php(以下のサンプルコード)に設定されます:
if ($this->form_validation->run()) {
$data = array(
'email' => $this->input->post('email'), // posting the email input field
'is_logged_in' => 1
);
$this->session->set_userdata($data);
redirect('main/members');
} else {
$this->load->view('login');
}
現時点では、実行時に以下を出力します。
Array
(
[__ci_last_regenerate] => 1440877455
[email] => [email protected]
[is_logged_in] => 1
)
出力はview.phpで次のコードを使用しています
print_r($this->session->all_userdata());
配列は以下のようなものを出力するはずですが、そうではありません:
Array
(
[session_id] => dd7e0e2266da6481ef45faaa7e3c808b
[ip_address] => 127.0.0.1
[user_agent] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
[last_activity] => 1387619782
[user_data] =>
[username] => Jhon
[email] => [email protected]
)
config.php:
$config['sess_driver'] = 'files';
$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_save_path'] = NULL;
$config['sess_match_ip'] = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
autoload.php
$autoload['libraries'] = array('database', 'session', 'form_validation');
$autoload['drivers'] = array('session');
$autoload['helper'] = array('url', 'form', 'html', 'security');
config.phpをチェックして、すべてが正しく設定されていることを確認し、Codeigniters Webサイトのマニュアルを参照しましたが、それでも問題を解決することに喜びはありません。
なぜこれが起こっているのかについて何か考えはありますか?または考えられる解決策はありますか?
答え :
解決策:
ここには多くの問題があります...
現時点では、実行時に以下を出力します。
配列 (( [__ci_last_regenerate] => 1440877455 [メール]=>[email protected] [is_logged_in] => 1 )。...
配列は以下のようなものを出力するはずですが、そうではありません:
配列 (( [session_id] => dd7e0e2266da6481ef45faaa7e3c808b [ip_address] => 127.0.0.1 [user_agent] => Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 31.0.1650.63 Safari / 537.36 [last_activity] => 1387619782 [user_data] => [ユーザー名]=>ジョン [メール]=>[email protected] )。いいえ、すべきではありません...どこにも「ユーザー名」を設定しておらず、残りはマニュアルで説明されています。
今すぐ構成を調べてみましょう...
$config['sess_driver'] = 'files';
^この行は、使用するストレージをライブラリに指示するものです。 'files'に設定されている場合、セッションがデータベースに保存されることは期待できません...
$config['sess_encrypt_cookie'] = FALSE;
^この設定は廃止されました。 CI3.0.xでは何もしません。
$ config ['sess_use_database'] = TRUE;
^
$config['sess_driver']
を設定しているため、この設定は無視されます。削除してください。
$config['sess_table_name'] = 'ci_sessions';
^これも無視されるため、CI3では使用しないでください。代わりに
$config['sess_save_path']
を設定してください。
$config['sess_save_path'] = NULL;
^これをNULLのままにすることはできません。ストックconfig.phpファイルのマニュアルコメントとインラインコメントの両方で、これを設定する必要があると書かれています!
$config['sess_match_useragent'] = FALSE;
^これはCI3でも何もしません。
$autoload['drivers'] = array('session');
^ドキュメントにはこれを示唆するものはなく、何もしません。
config.phpをチェックして、すべてが正しく設定されていることを確認し、Codeigniters Webサイトのマニュアルを参照しましたが、それでも問題を解決することに喜びはありません。
それどころか、設定ファイルの簡単な説明である最も基本的なドキュメントにも注意を払っていませんでした...あなたは明らかにCodeIgniter2.xから古い設定をコピーして貼り付けただけです。 アップグレード手順に従ってください。
答え :
解決策:
これが私があなたにアドバイスすることです
$data = array(
'email' => $this->input->post('email'), // posting the email input field
'is_logged_in' => 1
);
//Use Var_dump($data) directly under the code above and add a die statement to check if the array actually contain the data as specified above
$this->session->set_userdata($data);
/*
** store the session inside a variable then var_dump it if it is really
* in there
*/
$result = $this->session->set_userdata($data);
var_dump($result);die;
変更に注意し、同じことを複製して、それらのデータが実際に配列に格納されているかどうかを確認し、$result内でセッションが利用可能かどうかを確認してください
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。