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
我检测了一下,对象没有注册进session,普通变量可以注册。 ----------- <? /******************************************* * Product : Baby Web * * Version : 1.0.001 * * Copyright : Baby Studio * * Author : Pan Yingjie * * Email : [email protected] * *******************************************/ ?> <? 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>
哈,发现问题了,看来我要很不好意思的收满分了(不过搂主不用担心我不好意思的),言归正传------------------- 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
php 4.1.2 得
Status: . Counter: .
php 4.3.1 得
Status: I'm awake. Counter: 1.
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
Status: . Counter: . ---------------------------
php版本问题
php 4.1.2 得
Status: . Counter: .
php 4.3.1 得
Status: I'm awake. Counter: 1.
-----------
<?
/*******************************************
* Product : Baby Web *
* Version : 1.0.001 *
* Copyright : Baby Studio *
* Author : Pan Yingjie *
* Email : [email protected] *
*******************************************/
?>
<?
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>
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