【发布时间】:2012-10-24 16:22:57
【问题描述】:
我有一个 PHP 应用程序,但在从 SESSION 获取用户对象时遇到问题。
保存对象时,我有以下代码(其他文件)。
$_SESSION['user'] = serialize($user);
当我尝试加载一个名为timeline.php 的文件时,问题就开始了。第一次加载页面(在我登录并设置 SESSION['user] 之后)页面运行良好。刷新页面时出现错误 500。
错误日志显示如下:
在timeline.php的第10行调用一个非对象的成员函数get()。
第 2-10 行的代码是这样的:
include_once('isUserLoggedIn.php');
require_once('classes/User.php');
session_start();
$user = unserialize($_SESSION['user']);
require_once('classes/Database.php');
$tweets = Database::getTimeline($user->get('user_id'));
谁能为此提供任何理由?
更新(1)
在timeline.php 中,我将var_dump($user) 添加到第8 行。第一次加载页面时,它给了我正确的值。
我第二次加载页面时它给了我 bool(false)。
更新(2)
问题似乎出在主机上(可能是那里的 php.ini 文件中的设置)。我使用的公司是 Fatcow。当我使用别人的主机(1and1)时,问题没有发生。
【问题讨论】:
-
$user 不是对象。添加 var_dump($user);在timeline.php 的第8 行。此外,如果您已经启动了会话,则应将 session_start 包装在条件中。 if(!isset($_SESSION)){session_start();}
-
做到了。第一次加载页面时,它向我显示 object(User)#1 (11) { ["user_id"]=> int(1) ["email_address"]=> string(18) "rag4real@gmail.com" [ "username"]=> string(13) "richardgorman" ["forename"]=> string(7) "richard" ["surname"]=> string(6) "gorman" ["avatar"]=> string( 26) "images/avatars/default.jpg" ["website"]=> NULL ["bio"]=> string(25) "我稍后再填写。" ["postcount"]=> int(0) ["followercount"]=> int(0) ["followingcount"]=> int(0) }
-
当我刷新页面时它显示 bool(false)。
-
您是否禁用了 cookie?您是否检查过“isUserLoggedIn.php”和“classes/User.php”中的异常情况?
-
他们似乎很好。我应该添加整个应用程序在本地运行良好。
标签: php session serialization