簡體   English   中英

Codeigniter-會話數據未通過數組保存在數據庫中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM