关于 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。
我搜索了又搜索又阅读了很多关于 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。