2010-01-13 23 views
0

我希望有人能夠提供關於Cookies和Codeigniter的一些信息,我已經閱讀了那裏的用戶指南,以便我瞭解如何設置它們等。我想知道的是如何使用例如,如果你看BBC​​網站,你可以拖放這些框,它會記住你放置它們的位置,而不需要你註冊或登錄等,所以我認爲它被存儲在cookie中。Codeigniter cookies

在我的網站上,我有一個菜單系統,允許用戶在'他們的'頁面上選擇功能的內容,現在我不希望他們必須註冊或登錄,所以我認爲我可以以某種方式將他們請求的內容存儲在cookie中?這可能嗎?目前,他們點擊一個鏈接,並使用URL中的ID和數據庫中的ID進行匹配,從數據庫中提取相關內容。我只保存每個請求的ID嗎?如果是的話如何?

感謝

回答

5

您使用笨不要緊,因爲你可以與你使用任何平臺上很容易地設置cookie信息的事實。 CodeIgniter只是提供cookie的包裝函數,以便於處理。如果你知道如何使用CI的cookie助手,那麼你應該沒有問題做這個工作。

最可靠的解決方案是使用一個包含該用戶唯一標識的cookie。該唯一標識符與包含用戶設置的數據庫記錄匹配。通過只保存cookie中的唯一ID,可以避免在設置更改時必須讀取和寫入cookie。如果您的網站需要自己的設置添加新功能,則無需觸摸該Cookie,只需將新設置值添加到數據庫即可。此外,您不希望在Cookie中公開設置信息,這可能會允許某人編輯Cookie的內容以嘗試進行SQL注入或其他攻擊。

您可以爲您的網站創建多個Cookie,因此我會爲唯一ID創建新的Cookie以與用戶設置相匹配。當用戶訪問您的站點時,加載CI cookie助手,然後使用CI的get_cookie('unique_cookie')助手來查找cookie。 cookie名稱'unique_cookie'是您用作包含用戶唯一標識的cookie的名稱。

如果get_cookie()返回false,那麼用戶沒有cookie,所以他可能是第一次訪問或者他刪除了cookie。你必須使用set_cookie($ cookie_array)創建一個新的cookie。 set_cookie()方法將關聯數組作爲參數。該數組包含cookie的值,其中之一是'name',您將設置爲'unique_cookie','value'將是唯一的ID(使用CI字符串幫助器的random_string()方法創建唯一的ID) 。在設置cookie時,您還需要使用包含默認設置值的唯一ID創建數據庫記錄。

當用戶在您的網站上時,創建一個會話對象(使用CI的會話庫)來保存唯一ID,以便當用戶在會話期間更改設置時,您可以將會話的唯一ID值與db記錄因此您可以更新該記錄而無需繼續觸摸cookie。對於可能需要獲取或設置設置的任何控制器操作,可以使用會話工具來獲取唯一標識。當用戶首次進入您的網站並且尚未創建會話對象時,您只需觸摸cookie即可。