2010-02-23 45 views
1

我正在測試構建互聯網的代碼,這是一個OOP教程。我有一個錯誤消息:PHP會話:會話變量在反序列化後自動重置()

反序列化()預計參數1是串,在給定的對象包括在線路/ global.inc.php 20

這裏是)串行化的代碼(: (新的用戶(mysql_fetch_assoc($ result)));} $ _SESSION ['user'] = serialize(new User(mysql_fetch_assoc($ result)));

這裏是反序列化()的代碼:

$ _SESSION [ '用戶'] =序列化(新的用戶(mysql_fetch_assoc($結果)));我發現用戶登錄後,頁面重定向到索引,會話變量仍然正確,但在索引頁面中的unserialize()運行後,所有會話變量都是重置爲一些數字,這裏是反序列化()行的代碼:

如果(isset($ _ SESSION [ 「LOGGED_IN」])):$用戶=反序列化($ _ SESSION [ '用戶']);

我不明白是什麼原因造成的。你可以在這裏下載該程序的整個代碼: http://s3.amazonaws.com/buildinternet/live-tutorials/first-php-app/first-php-application.zip

+0

的可能重複[警告:mysql_fetch_ *預計參數1是資源,布爾給定的錯誤(http://stackoverflow.com/questions/11674312/warning-mysql-fetch-expect-parameter-1-to-resource-boolean-given-error) – 2012-07-28 16:44:15

回答

4

我相信,當你調用session_start()

它會自動在執行結束時被串行化以及數據可能會自動通過PHP UN-系列化,這意味着你不一定必須自己做。

+1

更正:'(un)serialize'不是必需的。將值或對象直接分配給'$ _SESSION'中的鍵,並且在session_start()時,它們將在那裏。 (有很多關於類定義可用的假設,__sleep /喚醒方法)。 – 2010-02-23 03:12:41

+0

這意味着我可以刪除所有(un)序列化函數,對吧? – Zack 2010-02-23 04:13:24

+0

非常有價值的信息 - 有人做過基準/性能測試,確認這是可取的嗎? – Mateng 2011-08-02 13:23:21

0

老帖子,但如果你還在尋找它,嘗試:

if(isset($_SESSION["logged_in"])) : $ObjUser = unserialize($_SESSION['user']);