Session_start不起作用或Session_destroy不起作用?

时间:2014-02-08 11:22:53

标签: php session

我将此代码放在默认索引页面中:

<?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()销毁它?

非常感谢大家!

2 个答案:

答案 0 :(得分:0)

您应该在尝试销毁之前取消设置会话。

session_unset();
session_destroy();

http://www.php.net/manual/en/function.session-unset.php

答案 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。我没有看到这个问题?