问题描述
|
我在lynda.com上正在上一堂课,该代码适用于他们,但尝试时无法使用。这是他们使用的确切代码。可以使用一些帮助来解释为什么它不起作用。
<?php
class Session
{
public $message;
function __construct(){
session_start();
$this->check_message();
}
public function get_message($msg=\"\") {
if(!empty($msg)) {
// then this is \"set message\"
$_SESSION[\'message\'] = $msg;
} else {
// then this is \"get message\"
return $this->message;
}
}
private function check_message() {
// Is there a message stored in the session?
if(isset($_SESSION[\'message\'])) {
// Add it as an attribute and erase the stored version
$this->message = $_SESSION[\'message\'];
unset($_SESSION[\'message\']);
} else {
$this->message = \"\";
}
}
}
$session = new Session();
?>
并在呼叫页面上
<?php
require_once(\"session_class.php\");
function output_message($msg=\"\") {
if (!empty($msg)) {
return \"<p>$msg</p>\";
} else {
return \"\";
}
}
if (isset($_SESSION[\'message\'])) {
echo \"session is set\";
} else {
echo \"session is not set\";
}
$message = $session->get_message(\"working\");
//$message = \"Working\";THIS WILL WORK
echo output_message($message);
?>
解决方法
您尚未在调用页面上创建对象实例。尝试这个:
require_once(\"session_class.php\");
$session = new Session();
编辑
当您从__construct
中取出check_message()
时,会设置SESSION,因为在您的check_message()
方法中,您需要:
unset($_SESSION[\'message\']);
它基本上破坏了您的会话,这就是为什么您看到“会话未设置”消息的原因。
如果要设置会话,只需删除该行。