8
?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()。

一个清晰的解释将不胜感激。谢谢

4

3 回答 3

4

PHP 使用 cookie 来管理会话;具体来说,通过在 cookie 中为该会话设置一个识别键/值对。

  • session的名字就是cookie的名字;基于 PHP 的网站的默认名称是PHPSESSID. session_name()返回会话名称,或者,如果传递了参数,则更新会话名称。
  • cookie 中的键/值对描述了会话 id;键表示它是会话标识符,值是会话标识符本身。session_id()返回会话 ID,或者,如果传递了参数,则更新会话 ID。

问题中的代码检查请求是否传递了会话:首先通过启动/重新激活会话session_start(),然后检查与会话名称匹配的现有 cookie。如果代码找到了,它会强制浏览器通过将过期日期设置为过去某个时间来删除 cookie。

于 2012-12-19T12:38:04.193 回答
1

从手册:

session_id()用于获取或设置当前会话的会话 ID。

session_name()返回当前会话的名称。如果给出了名称,session_name() 将更新会话名称并返回旧的会话名称。

id用作存储会话的数据库的主键(唯一)(默认情况下仅在磁盘上的文件中),它name只是一个名称。我不确定是否name需要独一无二。因此,在这种情况下,代码会检查 session_id(从浏览器 cookie 获取数据并在本地数据库中查找)或者是否存在具有给定 session_name 的 cookie。如果是这样,它将 cookie(客户端)的到期时间设置为 43.2 分钟前,并销毁会话(服务器端)。

于 2012-12-19T12:42:20.347 回答
0

要知道访问者处于什么“会话”中,需要设置一个 cookie。只要该 cookie 可用,用户将保持在同一会话中。要结束会话,需要将其删除(这解释了 setcookie().

session_id() 和 session_name() 在 php 手册中

于 2012-12-19T12:37:19.353 回答