关于session_destroy的默默无闻

时间:2015-09-03 09:20:04

标签: php session cookies destroy

我搜索并搜索并阅读了很多关于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真正做到了什么!! ?

提前致谢

2 个答案:

答案 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.