[英]Codeigniter - Session data not saving in database via array
當我輸入在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] => jhon@gmail.com
[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] => jhon@gmail.com
)
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網站上的手冊,但在解決問題上仍然不滿意。
是否知道為什么會這樣? 或任何可能的解決方案?
這里有很多問題...
目前在執行時輸出以下內容:
\n 排列\n (\n [__ci_last_regenerate] => 1440877455\n [電子郵件] => jhon@gmail.com\n [is_logged_in] => 1\n )\n...
該數組應該在下面輸出類似的內容,但不是:
\n 排列\n (\n [session_id] => dd7e0e2266da6481ef45faaa7e3c808b\n [ip_address] => 127.0.0.1\n [user_agent] => Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 31.0.1650.63 Safari / 537.36\n [last_activity] => 1387619782\n [user_data] => \n [用戶名] => Jhon\n [電子郵件] => jhon@gmail.com\n )\n
不,不應該...您沒有在任何地方設置“用戶名”,其余內容在手冊中進行了說明 。
讓我們現在檢查您的配置...
$config['sess_driver'] = 'files';
^這行告訴圖書館要使用什么存儲。 如果將其設置為“文件”,則不能期望將會話保存到數據庫中。
$config['sess_encrypt_cookie'] = FALSE;
^此設置已過時; 在CI 3.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網站上的手冊,但在解決問題上仍然不滿意。
相反,您甚至沒有關注最基本的文檔,這些文檔是配置文件中的簡短描述……您顯然只是從CodeIgniter 2.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中可用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.