session的问题,书中的源码得不到正常结果

fountain521 2003-08-15 10:27:34
<?php
// Make sure to include class definition BEFORE session is started
class sleepy
{
var $status;
var $counter;

// Constructor
function sleepy()
{
$this->counter = 1;
$this->status = "I'm alive";
}

// Wakeup is called each time this object is deserialized
function __wakeup()
{
$this->counter++;
$this->status = "I'm awake";
}

// Sleep is called each time this object is serialized
function __sleep()
{
$this->status = "I'm asleep";
// If this array is not returned, the object is not serialized
return array("status", "counter");
}
} // end class sleepy

// Initiate the session
session_start();

if (!isset($_SESSION["sleepy_obj"]))
{
$sleepy_obj = new sleepy;
session_register("sleepy_obj");
}
?>
<html>
<head>
<title>Session and Objects</title>
</head>
<body>
<?php
$buf = sprintf("Status: %s. Counter: %s.", $_SESSION["sleepy_obj"]->status, $_SESSION["sleepy_obj"]->counter);
echo $buf;
?>
</body>
</html>
...全文
46 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fountain521 2003-08-18
  • 打赏
  • 举报
回复
开来要结贴了。。。
babystudio 2003-08-15
  • 打赏
  • 举报
回复
哈,发现问题了,看来我要很不好意思的收满分了(不过搂主不用担心我不好意思的),言归正传

-------------------
session_register的使命是在session中注册一个变量,或者更直接的说是一个变量名,在直接就是全局变量——数组$_SESSION中加一个索引而已。
应该这样修改:
$sleepy_obj = new sleepy; //这一句创建了对象
session_register("sleepy_obj"); //这一句注册了一个名为sleepy_obj的session变量。
$_SESSION["sleepy_obj"]=$sleepy_obj; //附加这一句,才能把刚刚创建的$sleepy_obj对象放进session变量$_SESSION["sleepy_obj"]中。

----------------
over
babystudio 2003-08-15
  • 打赏
  • 举报
回复
我检测了一下,对象没有注册进session,普通变量可以注册。
-----------
<?
/*******************************************
* Product : Baby Web *
* Version : 1.0.001 *
* Copyright : Baby Studio *
* Author : Pan Yingjie *
* Email : babystudio@263.net *
*******************************************/
?>
<?
header("Expires: Mon, 11 Dec 1978 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");


?>
<?php
// Make sure to include class definition BEFORE session is started
class sleepy
{
var $status;
var $counter;

// Constructor
function sleepy()
{
$this->counter = 1;
$this->status = "I'm alive";
}

// Wakeup is called each time this object is deserialized
function __wakeup()
{
$this->counter++;
$this->status = "I'm awake";
}

// Sleep is called each time this object is serialized
function __sleep()
{
$this->status = "I'm asleep";
// If this array is not returned, the object is not serialized
return array("status", "counter");
}
} // end class sleepy

// Initiate the session
session_start();

if(!isset($_SESSION["t"])){
$t=1;
session_register("t");
}
if (!isset($_SESSION["sleepy_obj"]))
{
$sleepy_obj = new sleepy;
session_register("sleepy_obj");
echo('sleepy_obj now session_register'.'<br>');
}
?>
<html>
<head>
<title>Session and Objects</title>
</head>
<body>
<?
echo(strval($_SESSION["t"]++).'<br>');
echo("Status: . Counter: .".$_SESSION["sleepy_obj"]->status.$_SESSION["sleepy_obj"]->counter);
?>
</body>
</html>
babystudio 2003-08-15
  • 打赏
  • 举报
回复
我的4.3.2 RC4也得到
Status: . Counter: .

---------------------------
php版本问题
php 4.1.2 得
Status: . Counter: .
php 4.3.1 得
Status: I'm awake. Counter: 1.
bluemeteor 2003-08-15
  • 打赏
  • 举报
回复
Status: . Counter: .
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

我的错误

4.1.0 register_globals= off
fountain521 2003-08-15
  • 打赏
  • 举报
回复
有没有别的办法啊?
fountain521 2003-08-15
  • 打赏
  • 举报
回复
我把register_globals 设置成 on 就可以了,但是这样会有安全的问题啊。。。
xuzuning 2003-08-15
  • 打赏
  • 举报
回复
php版本问题
php 4.1.2 得
Status: . Counter: .
php 4.3.1 得
Status: I'm awake. Counter: 1.
hodat 2003-08-15
  • 打赏
  • 举报
回复
代码没有问题~~

我得到的结果是:

Status: I'm alive. Counter: 1.

建议查看PHP的安装设置
fountain521 2003-08-15
  • 打赏
  • 举报
回复
我得到的结果是
Status: . Counter: .
fountain521 2003-08-15
  • 打赏
  • 举报
回复
果真能搞定呢,babystudio(ABabyStudio) ( ) 信誉:103

让我先思考一下。。。呵呵呵。。

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧