关于 session_destroy 的晦涩

obscurity about session_destroy

我搜索了又搜索又阅读了很多关于 session_destroy 到底是做什么的!但至少对我来说没有结果!首先阅读以下详细信息:

When a session is created (session_start) a file is created with a unique identifier that is given to the user as a cookie, when variables in the $_SESSION array are modified or added the temporary file is updated with that information so that it can be used somewhere else on the website.*

session_destroy* will delete this file, this is commonly done for when a user logs out of your website so that the (now useless and unnecessary) file isn't taking up space.

我们知道会话 ID 存储在会话 cookie 中,正如教程所说,会话销毁会删除会话 cookie 文件(包括 session_id),所以为什么当我开始一个新会话时它没有生成一个新的身份证!这让我很困惑!看例子:

<?php
    session_start();
     echo session_id();
    session_destroy();
    session_start();

     echo "---".session_id();
?>

结果:l4k80dkrl5kd6cdlobhbu5s3i1---l4k80dkrl5kd6cdlobhbu5s3i1

所以它给了我与前一个相同的会话 ID。

那么 session_destroy 到底做了什么!! ?

提前致谢

您所说的几乎是正确的,但是 如果您销毁会话并且脚本以 PHP 结束,那就是时间文件被删除。如果您只是尝试销毁并再次创建它,它会使用相同的 file/session ID。

它不仅是创建的文件,而且该文件还包含您在会话中存储的所有数据。查看服务器中的会话数据,非常有趣。

更新 你可以做更多有趣的事情。写一个PHP文件

<?php
session_start();
sleep(29000);//delete the session after 29 seconds
session_destroy();
?>

现在看看session文件,20秒后应该会被删除

<?php session_start(); ?>

然后转到 google chrome,然后从那里手动删除 cookie。该会话将不再可用。

<?php session_destroy(); ?> will not destroy the cookies on the client side. Next time you create a session, it will just use the same old information. This is the prime reason of your question.

做 文件 1:

<?php session_start(); $_SESSION['test'] = "A"; ?>

文件 2:

<?php session_start(); $_SESSION['test'] = "B"; ?>

结果文件:

<?php session_start(); echo $_SESSION['test']; ?>

现在从两台计算机访问您的网站,一台计算机上使用 file1,另一台计算机上使用 file2。来自googlechrome,切换他们的cookie信息,看看session A如何分配给B,B如何分配给A。

来自 PHP 文档:

It does not unset any of the global variables associated with the session, or unset the session cookie.

所以在 session_destroy() 之后,保存会话 ID 的 cookie 仍然存在,只是会话文件将被删除。所以 start_session() 试图在 cookie 中找到会话 ID 的文件,当然失败了,它只是为此创建了一个新的空文件。所以你的id不会变。

如果您真的想改变它,请尝试删除 cookie。