2013-06-30 53 views
1

我正在開發一個網站,用戶可以註冊和訪問他們的帳戶,並且當用戶連接時,我將用戶對象保存在使用序列化和base64編碼的cookie中。它完美地工作,突然PHP腳本不想創建cookie。我的PHP腳本是:PHP在Cookie中存儲對象不起作用

/** 
* Function that creates a cookie from an User object 
* @param User $user User object to be stored in the cookie 
* @param int $timeout Lifetime of the cookie (0 if should be destroyed when the navigator is closed) 
*/ 
function setUserCookie($user, $timeout = COOKIE_MAXLIFETIME) { 
    setcookie('user', base64_encode(serialize($user)), $timeout, '/'); 
} 

我不知道問題出在哪裏是從哪裏來的,我希望有人能幫助我:)

編輯: 這是大學的一個項目,我我知道我的網站在將對象存儲在cookie中時可能很脆弱,但我們必須關注功能而不是網站的安全性。

+1

用戶可以更改cookie並以其他人身份登錄。 – SLaks

+2

不要這樣做。將用戶存儲在會話中,這是一種更清潔和更節省的方法。 – Pierre

+0

好的,我正在更改我的代碼到會話。但是,在關閉導航器之後,有沒有比cookie更清潔的方式來保存用戶連接? –

回答

0

我終於使用$_SESSION使其工作,即使用戶不能保持登錄到網站。

2

不要將序列化的字符串存儲在外界可以看到和處理的東西中!這是一個安全漏洞!爲什麼?

序列化的字符串包含用於構建對象的類的名稱。這可以改變。反序列化任意字符串意味着創建了一個任意對象。如果這個對象代碼可用,它將被執行。這基本上是一個遠程代碼執行漏洞,因爲外部攻擊者可以在一定程度上選擇他想要執行的代碼。

如果您確實想要將數據存儲在cookie中,請使用僅包含數據的序列化格式,並且不要引用任何PHP對象。 json_encode()可能是正確的。更好的方法是使用會話並存儲與當前登錄服務器端相關的任何內容。