2011-11-09 92 views
1

爲什麼建議將CodeIgniter會話存儲在數據庫表中?我知道這是關於安全,但是如何?CodeIgniter會話

爲什麼在使用Session類時需要在配置中設置加密密鑰? 你應該解密會話嗎?

$this->session->sess_destroy();請刪除整個cookie還是隻刪除cookie中的數據?並且它是否完全結束了會話,我的意思是撤消 $this->load->library('session')

回答

3

CI的會話實際上是cookies。加密,但餅乾仍然。這就是爲什麼最好將會話存儲在數據庫中,因爲你(應該是)處理一個難以達到的攻擊目標,特別是如果你使用活動記錄,這會自動轉義你的查詢(以避免SQL注入)。 此外,與cookies相反,DB不具備可用內存量有限的情況,因此您可以在其中存儲任意數量的數據,緩存操作並將其從前端隱藏。

我不確定爲什麼它需要,除了某些會話數據是由CI加密的自動。因此,即使您不使用加密庫,仍然有一些加密(例如,保存會話ID)。正如凱慶正確指出的那樣,您不必對CI已經處理的數據進行任何解密。

$this->session->sess_destroy()只是刪除存儲爲會話的數據。雖然也是cookie,但爲了刪除整個內容,您需要使用專用功能(例如,查看cookie助手)。但請記住,當您調用此函數時,還會刪除Flash消息(因爲它們是會話),所以如果您只想取消設置某些元素,請使用unset_userdata($item)

它也沒有結束庫加載。至於任何其他庫,類或控制器等,在每次請求後,所有內容都從零開始重新加載。每當您提出請求時,腳本都會運行,重新初始化所有內容,腳本結束後,所有內容都會在雨中流失。這是一個PHP腳本的正常使用壽命。如果腳本在調用session-> sess_destroy()之後沒有結束綁定,會話庫仍將被加載,但數據將被刪除。

2

要回答你的第一個問題 - 建議通過數據庫存儲,以最小化會話中發現的數據,並降低愚蠢的風險 - 像幫手。由於DB存儲的會話只會將該ID存儲在cookie中,因此可用信息會減少爲不可用的信息。

你不需要解密任何東西。引擎爲你處理。

至於摧毀 - 我不知道確切。但我想一個簡單的var_dump會回答這個問題。