【问题标题】:PHP - Error 500 after page refreshPHP - 页面刷新后出现错误 500
【发布时间】: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


【解决方案1】:

当反序列化对象时可能会发生很多奇怪的事情,请参阅 PHP 手册页以获取更多信息。

http://php.net/manual/en/function.unserialize.php

这条评论似乎很中肯: http://www.php.net/manual/en/function.unserialize.php#77826

【讨论】:

  • 您的另一种选择是只保存用户 ID,然后重建他们的用户类(如果您使用的是 ORM,那么这只是在该 ID 上运行查询的一种情况)。或者评估您需要用户类来做什么,只是数据?然后将该数据作为数组粘贴到会话中并完成。
猜你喜欢
  • 2018-04-03
  • 2021-11-03
  • 2020-07-23
  • 2013-01-25
  • 2022-12-09
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多