我搜索并搜索并阅读了很多关于session_destroy究竟是什么的内容!但至少对我来说没有结果!首先阅读以下详细信息:
创建会话(session_start)时,会创建一个文件 作为cookie提供给用户的唯一标识符 $ _SESSION数组中的变量被修改或添加临时 使用该信息更新文件,以便可以在某处使用它 否则在网站上。*
session_destroy *将删除此文件,这通常适用于何时 用户退出您的网站,以便(现在无用和 不必要的文件不占用空间。
我们知道会话ID存储在会话cookie中,正如教程所说,会话销毁会删除会话cookie文件(包括session_id),所以为什么当我开始新会话时它没有生成新的ID!这让我感到困惑!看一下这个例子:
<?php
session_start();
echo session_id();
session_destroy();
session_start();
echo "---".session_id();
?>
结果:l4k80dkrl5kd6cdlobhbu5s3i1 --- l4k80dkrl5kd6cdlobhbu5s3i1
所以它给了我与前一个会话ID相同的会话ID。
那么session_destroy真正做到了什么!! ?
提前致谢
答案 0 :(得分:2)
来自PHP文档:
它不会取消任何与之关联的全局变量 会话,或取消设置会话cookie。
所以在session_destroy()
之后,保存会话ID的cookie仍然存在,只会删除会话文件。所以start_session()
尝试在cookie中找到会话ID的文件,当然它失败了,它只是为它创建了一个新的空文件。所以你的身份证不会改变。
如果你真的想改变它,请尝试删除cookie。
答案 1 :(得分:1)
如果你破坏了会话并且脚本以PHP结尾,那么你几乎正确的说法是 BUT ,那就是删除时间文件。如果您只是尝试销毁并再次创建它,它将使用相同的文件/会话ID。
它不仅是创建的文件,而且文件包含您在会话中存储的所有数据。查看服务器中的会话数据,非常有趣。
<强>更新强> 你可以做更有趣的事情。写一个PHP文件
<?php
session_start();
sleep(29000);//delete the session after 29 seconds
session_destroy();
?>
现在看看会话文件,它应该在20秒后删除。
待办事项
<?php session_start(); ?>
然后转到谷歌浏览器,并从那里手动删除cookie。会议将不再可用。
<?php session_destroy(); ?>
不会破坏网站上的Cookie 客户端。下次创建会话时,它将使用相同的会话 旧信息。这是你提问的主要原因。
待办事项 file1:
<?php session_start(); $_SESSION['test'] = "A"; ?>
file2:
<?php session_start(); $_SESSION['test'] = "B"; ?>
resultFile:
<?php session_start(); echo $_SESSION['test']; ?>
现在,从两台计算机上,在一台计算机上使用file1访问您的网站,在另一台计算机上访问file2。从谷歌浏览器,切换他们的cookie信息,看看会话A如何分配给B和B分配给A.