在PHP手册中,session_destroy()功能的描述是:
session_destroy()会销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用session_start()。
我对此描述感到困惑。如果此函数销毁所有会话数据,那么为什么与会话关联的全局变量不会被取消?为什么我们可以再次使用会话变量?
答案 0 :(得分:5)
我对此描述感到困惑。如果此[
session_destroy()
]函数销毁所有会话数据,那么为什么与会话关联的全局变量不会被取消?为什么我们可以再次使用会话变量?
会话数据是与会话关联的数据。会话由其名称(会话名称)及其ID(会话ID )定义。
通过使用该函数,所有这些会话(名称+ id)数据都将被销毁。
允许您读取/设置该数据的变量容器仍然存在,因此您可以对该数据进行操作(例如,可能存在上次活动中的信息,这是注销,并且您希望存储最后一个活动在logout或者注销某些日志或数据库时,为什么要删除它?这会产生反效果,因为你想快速销毁(或提交)会话,例如当你只知道只读访问时,将会话数据保存在内存中,但已提交会话,因为无需保持打开状态。
请记住,即使这些变量都是$_SESSION
访问,它们也不再是会话的一部分。也许那是令人困惑的部分?
BTW我的描述并不完全正确。 PHP仅通过id在内部标识会话数据,因此您可以更改会话名称,session_destroy()
仍会删除会话数据,因为会话ID未更改。
答案 1 :(得分:1)
session_destroy()
删除存储会话数据的会话文件。看这里:
<?php
session_save_path('./session/');
session_start();
$_SESSION['v'] = array( 'foo' => 123, 'bar' => 'spam' );
$_SESSION['m'] = "rocky";
if( isset($_GET['delete']) == 'true' )
session_destroy();
?>
我有一个脚本whitch创建会话并将v
的值设置为10
,并将会话数据保存在名为./session
的文件夹中的相同脚本路径中。 / p>
现在打开页面然后浏览./session
目录,您应该会看到一个名称类似于sess_4r7ldo7s5hsctu3fgtvfmf4sd0
的文件。这是存储会话数据的地方,它将包含:
v|a:2:{s:3:"foo";i:123;s:3:"bar";s:4:"spam";}m|s:5:"rocky";
通过将session_destroy()
传递到页面来激活?delete=true
,会话文件将被删除。