2013-05-05 57 views
0

我有一個問題。我正在使用最新版本的CI。codeigniter會話保存到數據庫不斷更新多次

我目前已經啓用會話來使用數據庫,但是它的工作方式只有一個問題,因爲每次更新會話時它都會更新數據庫。

有沒有辦法解決這個問題,以便會話只會在數據庫破壞之前更新一次?

我目前只有來自一個CI會話的9個更新請求:)!所以任何幫助都會很可愛。

enter image description here

一個簡單的代碼示例,我proccess比這要複雜得多,但只是爲了演示目的

控制器/ AUTH [包括與真正登錄後]

function login(){ 
$trial=$this->user->attempt($this->input->post('user'),$this->input->post('pass')); 

if($trial){ 
//1st update query 
$this->session->set_userdata('user',$trial); 


//Start intializing user 

//2nd update query 
$this->load->model('relations');//constructer will load user friends and save them to $this->session->set_userdata('relations',$rel); 

//3rd update query 
$this->load->model('settings');//construtor will load user settings and save them to settings 
} 
} 

以上代碼將創建3個更新請求,所有目標都是更新字段userdata =當前會話。

我的觀點是沒有必要更新數據庫每次我們添加了一些會議的時間,其已保存在$ _SESSION,因此它保留下來,並保持操作$ _SESSION直到結束,

只更新USER_DATA一次在所有runtime -destructor的最後,最終結果會話足以將會話保存到db。

請注意,CI使用select * from ci_session(圖片中的第一個請求)從會話加載會話,然後它只是反覆更新會話並且毫無意義,因爲它不會在運行時再次選擇它!

所以爲什麼不只是一旦加載會話庫就加載它。並在破壞之前保存它。多數民衆贊成什麼即時嘗試完成。

由於

+0

當然,如果您決定將會話數據存儲在數據庫中,那麼只要會話更新,數據庫就必須更新?你爲什麼要不要更新? – jleft 2013-05-05 21:21:31

+0

當然它應該更新..但只有一次就夠了!它不需要每一次都進行更新..在所有工作完成後,只有一次該怎麼辦? – Zalaboza 2013-05-05 22:18:39

+0

程序中的哪些代碼導致了這些請求? – jleft 2013-05-05 22:39:24

回答

0

會話可以通過使陣列的所有的值,而不是做他們每次一個被更新。有用戶指南中再看看

+0

這與什麼有什麼關係? – Zalaboza 2013-05-05 22:19:18

+0

我無法從您的代碼中知道,但我猜測您正在單獨更新各個值。如果您不想繼續更新,請查找更新發生的位置並停止執行更新。否則,請勿使用數據庫更新 – jmadsen 2013-05-05 22:29:06

1

我已經找到了一個解決方案,通過使用下面的代碼得到了會議的現有的用戶數據

$userdata = $this->session->all_userdata(); 
$userdata['fname'] = 'John'; 
$userdata['lname'] = 'Mulharn'; 
$userdata['email'] = '[email protected]'; 
$this->session->set_userdata($userdata); 

所有這一切都發生在1個交易而不是3數據庫事務。 希望有所幫助。