session_id()和session_name()究竟是什么?说明如何在以下代码中使用它们

时间:2012-12-19 12:33:59

标签: php session cookies

?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()究竟是什么。

非常感谢明确的解释。 感谢

3 个答案:

答案 0 :(得分:3)

PHP使用cookie来管理会话;具体而言,通过在cookie中为该会话设置标识键/值对。

  • 会话名称是cookie的名称;基于PHP的网站的默认名称是PHPSESSIDsession_name()返回会话名称,或者,如果传递参数,则更新会话名称。
  • Cookie中的键/值对描述会话ID; key表示它是会话标识符,值是会话标识符本身。 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