我将此代码放在默认索引页面中:
<?php
$_SESSION['user'] = 'Bill';
print $_SESSION['user'];
$_SESSION = array();
session_destroy();
$_SESSION['user'] = 'Andy';
print $_SESSION['user'];
?>
输出如下:
Bill
Warning: session_destroy(): Trying to destroy uninitialized session in C:\xampp\htdocs\DSP\index.php on line 15
Andy
显然我必须使用session_start()初始化会话,但这些是我的问题:
1)但是,为什么我可以在没有session_start()函数的情况下存储会话?
2)现在我把session_start()函数放在代码的顶部:
<?php
session_start();
$_SESSION['user'] = 'Bill';
print $_SESSION['user'];
$_SESSION = array();
session_destroy();
$_SESSION['user'] = 'Andy';
print $_SESSION['user'];
?>
现在输出如下:
Bill
Andy
我现在的问题是:
3)为什么Andy印在输出上?为什么编译器NOT给我错误,必须再次启动会话,因为我之前使用命令session_destroy()销毁它?
非常感谢大家!
答案 0 :(得分:0)
您应该在尝试销毁之前取消设置会话。
session_unset();
session_destroy();
答案 1 :(得分:0)
但是,为什么我可以在没有session_start()函数的情况下存储会话?
因为它只是一个通常的数组,可以这样访问。它与$_POST
,$_GET
和其他超全局数组相同。但是,会话仅在您致电session_start()
后创建,因此尝试在初始化会话之前将信息存储在数组中是毫无意义的。
我在代码中看不到任何异常并且输出产生了。为了说明,请参阅以下代码:
<?php
session_start();
$_SESSION['user'] = 'Bill';
var_dump($_SESSION);
$_SESSION = array();
session_destroy();
var_dump($_SESSION);
$_SESSION['user'] = 'Andy';
var_dump($_SESSION);
输出结果为:
array(1) {
["user"]=>
string(4) "Bill"
}
array(0) {
}
array(1) {
["user"]=>
string(4) "Andy"
}
以上是这样的:
session_start()
Bill
的字符串user
已添加到关联数组session_destroy()
销毁存储在会话存储中的会话数据。 ($_SESSION
现在为空)Andy
的字符串user
将添加到关联数组正如您所期望的那样,输出为Andy
。我没有看到这个问题?