2012-03-10 40 views
1

我感到困惑簡單的問題:基本笨活動記錄和本地查詢

  • 有什麼活動記錄和本地查詢之間的區別?

  • 如果編碼CI時遇到麻煩,我該怎麼辦?有沒有麻煩拍攝?我應該使用什麼樣的裝配工?

  • 是什麼

謝謝您的回答CI會話和PHP會議上的區別

這裏就是我發現對差異,但仍然沒有讓我statisfied:

Session類允許您在瀏覽您的網站時維護用戶的「狀態」並跟蹤他們的活動。 Session類將每個用戶的會話信息作爲序列化(和可選加密)的數據存儲在cookie中。它還可以將會話數據存儲在數據庫表中以增加安全性,因爲這可以將用戶Cookie中的會話ID與存儲的會話ID進行匹配。默認情況下只保存cookie。如果您選擇使用數據庫選項,則需要按照以下說明創建會話表。

回答

3

CodeIgniter的「活動記錄」isn't what the real active record is all about.活動記錄就像您的PHP數據庫一樣。你使用PHP接口而不是使用SQL查詢。這就好像感覺數據庫數據是用PHP而不是在數據庫中。

在CI中,它們的活動記錄只是一個普通的舊式「查詢構建器」,它以一種乾淨的,面向對象的方式構建SQL查詢,並返回格式化乾淨的結果,這歸功於幾種方法將其格式化爲自己喜歡的形式數組格式化結果爲result_array(),對象格式化結果爲result())。

活動記錄是一種訪問數據庫中數據的方法。數據庫表或視圖被包裝到一個類中。因此,一個對象實例綁定到表中的單個行。在創建一個對象之後,一個新行在保存時被添加到表中。加載的任何對象都從數據庫中獲取其信息。當對象更新時,表格中的對應行也會更新。包裝類爲表或視圖中的每列實現訪問器方法或屬性。

框架CodeIgniter有一個查詢生成器,它調用「ActiveRecord」,但它沒有實現ActiveRecord模式。相反,它實現了用戶指南引用的模式的修改版本。 CodeIgniter中的ActiveRecord功能可以通過使用CodeIgniter DataMapper庫或CodeIgniter Gas ORM庫來實現。 (Wikipedia)

CI也使用會話,很像PHP會話,差異是where it's stored

加載頁面時,會話類將檢查用戶的會話cookie中是否存在有效的會話數據。如果不存在會話數據(或者已經過期)一個新的會話將被創建並保存在cookie中。如果會話確實存在,其信息將被更新並且cookie將被更新。每次更新後,會重新生成session_id。 (http://codeigniter.com/user_guide/libraries/sessions.html

不像PHP哪裏會話數據保留在服務器與發送的cookie或通過會話ID標識,CI編碼它的會話數據到cookie自身。這也是爲什麼你要使用會話,因爲在Cookie中保存會話是不安全加密會話數據需要一個會話「鑰匙」之前。他們爲什麼這樣做,我不知道,也許優化服務器,避免數據存儲到它,犧牲負載速度

+1

還有一點要注意的是,默認情況下,CI的會話類只存儲之類的會話ID,IP地址,用戶代理和最後的活動時間。您可以添加自定義數據,但顯然將個人身份信息放入其中並不是一個好主意。另一方面,普通的PHP會話只會將SESSION ID發送給客戶端,並且您放入其中的任何自定義數據僅存儲在服務器上。 CI會話稍微比普通PHP會話更安全,因爲你可以保護更多的對抗攔截攻擊 - CI課程(可以)檢查UA和IP地址字符串以驗證會話 – 2012-03-10 08:56:25

+0

嗯..謝謝...偉大的解釋:) – 2013-09-28 05:37:28

1

活動記錄可以簡化在數據庫上執行重複性任務的工作。

一個正常的查詢看起來像:

$query = $this->db->query('SELECT * FROM mytable'); 

凡與主動同會是什麼樣子:

$query = $this->db->get('mytable'); 

不要緊,你用什麼,它只是在做同樣的事情最後,閱讀數據庫的手冊部分。

至於Session,它幾乎是一樣的CodeIgniter是一個框架它包裝了一些PHP的東西,讓你的生活更輕鬆,所以你可以使用原生的PHP Session或CI中的一個,並不重要。

最後,如果你不使用那麼多CI,那麼只需做一些原始的PHP。

+0

關於activerecords你是對的,但有CI會話和PHP會議上相差很大。根據手冊本身,ci會話不是基於php原始會話。它還提到,ci會話不是出於安全目的(意味着敏感數據應該保存在php會話中而不是ci會話中)。所以爲了安全起見,應該使用一個安全層的php會話(如果你使用的是codeigniter)。 – itachi 2012-03-10 08:29:29