【问题标题】:Object Session not being passed对象会话未通过
【发布时间】:2012-09-07 15:18:48
【问题描述】:

在文件 A.php 上,我有一个 while 循环,它从数据库中提取数据并连接到 class.php 以为每个数据集创建对象。那部分工作正常。
在该循环中,我尝试将每个对象保存到由其 id 值定义的 SESSION 创建新对象后

文件A.php:

$_SESSION[$pObject->id] = $pObject;

if (isset($_SESSION[$pObject->id]))

{

echo "SESSION $pObject->id is set"; 

}

我已经确认它正在创建中。

现在,我有一个通过 GET 向文件 B.php 发送 Objects id 值的表单,我确认已收到该值。

文件 B.php:

require_once 'class.php';

session_start();

$id = $_GET['id'];

echo $id;

//Now $id is in my new file, so I try to call my SESSION

if(isset($_SESSION[$id]))

{

echo "SESSION $id is set";

$pObjectCurrrent = $_SESSION[$id];

}

else{

echo "SESSION $id is Not set";

}

问题是,尽管文件 B.php 中的 $id 等于文件 A.php 中 $pObject->id 的值,但文件 B.php 中的 SESSION[$id] 未设置且没有任何值。相反,我收到一个未定义的变量错误。任何想法将不胜感激。

【问题讨论】:

  • 你确定你也在文件 a 中调用session_start() 吗?
  • 文件 A.php 被“包含”在具有 session_start() 的 main.php 中
  • var_dump($_SESSION) 看看里面到底有什么,如果$id 真的和$pObject->id 一样。
  • var_dump($SESSION[$pObject->id] in File A 确认 pObjects id 等于 File B 中的 $id,但是 File B 中的 var_dump($_SESSION[$id]) 导致“空"
  • session_start 是在包含之前而不是之后被调用的吗?

标签: php session object


【解决方案1】:

您不能使用整数作为会话变量名。

您可以像这样设置会话变量:

$_SESSION['obj' . $pObject->id] = $pObject;

然后像这样从 B.php 中检索它:

echo $_SESSION['obj' . $id];

本质上是将 ID 与字符串连接起来,因此变量名将是“obj5”、“obj2”等。

另外 - 如果您在会话对象中传递大量数据,我建议您研究序列化和替代方法,例如将会话数据存储到数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多