2012-07-10 40 views
1

我一直在嘗試使用Codeigniter進行會話,每次刷新瀏覽器時都會發現新的會話被創建......這沒有任何意義。我嘗試刪除所有會話,然後我得到一個新的,有沒有人看到這個錯誤?如何避免在codeigniter中創建自動會話?

這是我的代碼:

$this->load->library('session'); 
print_r ($this->session->all_userdata()); 
$this->session->sess_destroy(); 

所以,用sess_destroy我刪除了會議,但是當我刷新一個新的會話來現場..

+0

如果回顯session_id()它是否每次重新加載都返回相同的ID或不同的ID? – maxhud 2012-07-10 16:37:07

+0

每次都有一個不同的id ...比如,如果每次刷新瀏覽器時都會創建一個新的 – jpganz18 2012-07-10 16:37:52

回答

2

快速峯值後,確認你描述的是一個默認的和正常的行爲。請教「會話如何工作?」 CodeIgniter用戶指南「的Session Class章節中。它說:

如果會話數據不存在(或者已經過期)一個新的會話將被創建並保存在cookie中。

這提供了會話類已使用

$this->load->library('session'); 

究竟是什麼這裏的情況之前開始。

如果您關心安全性,請不要擔心。新會議不會繼續上屆會議的數據。

最後,如果由於某種原因,你想摧毀了會議,並有條件地啓動它,檢查它是否有存在:

if($this->session->userdata('username') === FALSE) 

按照手冊中的規定:

注意:如果您嘗試訪問的項目不存在,該函數返回FALSE(布爾值)。

+0

你是對的!但我在我的配置文件中發現了問題,出於某種原因,如果我將sess_encrypt_cookie設置爲false,則會話不起作用。 – jpganz18 2012-07-10 22:08:17

2

嗯,很肯定sess_destroy摧毀舊會話,所以當然你會刷新一個新的!

編輯:

在session.php文件

/** 
* Destroy the current session 
* 
* @access public 
* @return void 
*/ 
function sess_destroy() 
+0

也就是說,只需從代碼中除去'$ this-> session-> sess_destroy();',除非有特定的原因你需要在某個時候對它進行核武器攻擊。 – quickshiftin 2012-07-10 19:00:16

+0

那麼,我刪除了sess_destroy ...但仍...我沒有用戶名的會話...是正常的?我得到像這樣Array([session_id] => 0cc6979e239bd106afb00be2743a6604 [ip_address] => 127.0.0.1 [user_agent] => Mozilla/5.0(Windows NT 6.1; rv:13.0)Gecko/20100101 Firefox/13.0.1 FirePHP/0.7。 1 [last_activity] => 1341947927 [user_data] =>) – jpganz18 2012-07-10 19:20:24

+0

您必須將用戶名放在那裏,默認情況下不存在。 $ _SESSION ['username'] ='bob'; – quickshiftin 2012-07-10 19:21:44