?php
function destroy_session_and_data() {
session_start();
$_SESSION = array();
if (session_id() != "" || isset($_COOKIE[session_name()]))
setcookie(session_name(), '', time() - 2592000, '/');
session_destroy();
} ?>
我理解上面的代码用于终止会话,但我无法理解if条件和setcookie命令的必要性。
还可以解释一下session_id()和session_name()究竟是什么。
非常感谢明确的解释。 感谢
答案 0 :(得分:3)
PHP使用cookie来管理会话;具体而言,通过在cookie中为该会话设置标识键/值对。
PHPSESSID
。 session_name()
返回会话名称,或者,如果传递参数,则更新会话名称。session_id()
返回会话ID,或者,如果传递参数,则更新会话ID。问题中的代码检查是否存在与请求一起传递的会话:首先通过使用session_start()
启动/重新激活会话,然后检查与会话名称匹配的现有cookie。如果代码找到一个,它会强制浏览器通过将其到期日期设置为过去的时间来删除cookie。
答案 1 :(得分:1)
从手册:
session_id()
用于获取或设置当前会话的会话ID。
session_name()
返回当前会话的名称。如果给出了名称,session_name()
将更新会话名称并返回旧会话名称。
id
用作存储会话的数据库的主键(唯一)(默认情况下只在文件ondisk中),name
只是一个名称。我不确定name
是否需要是唯一的。
因此,在这种情况下,代码检查session_id(从浏览器cookie获取数据并在本地数据库中查找)或者是否存在具有给定session_name的cookie。如果是这样,它将cookie(客户端)的到期时间设置为43分钟前并破坏会话(服务器端)。
答案 2 :(得分:0)
要知道访问者所处的“会话”,就会设置Cookie。只要该cookie可用,用户将保持在同一会话中。要结束会话,需要将其删除(这解释了setcookie()。
session_id()和session_name()在php manaul
中