查看php cookie设置

admin 103 0
PHP中设置Cookie主要通过setcookie()函数,需指定名称、值、过期时间(时间戳)、路径、域名等参数,setcookie("name", "value", time()+3600, "/")`;查看Cookie则通过超全局数组$_COOKIE,但需注意Cookie需在HTTP请求头中发送,故首次设置后刷新页面才能生效,注意事项:设置需在输出内容前执行,避免headers already sent错误;过期时间需为未来时间戳;可通过httponly、secure等增强安全性,防止XSS攻击,关键点:函数设置、数组读取、时效控制及安全配置。

如何查看PHP中的Cookie设置?完整指南

在PHP开发中,Cookie是一种重要的客户端存储技术,用于在用户浏览器中保存数据(如登录状态、用户偏好、购物车信息等),在调试或验证Cookie功能时,查看PHP的Cookie设置(包括已设置的Cookie值、属性参数等)是关键步骤,本文将详细介绍查看PHP Cookie设置的多种方法,帮助你高效排查问题。

PHP Cookie基础回顾

在深入查看设置前,让我们先简要回顾PHP中Cookie的核心概念:

Cookie的创建

通过setcookie()函数设置Cookie,其语法如下:

setcookie(string $name, string $value = "", int $expires = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false, string $samesite = null)

常用参数包括:

  • $name:Cookie名称(必填)
  • $value:Cookie值
  • $expires:过期时间(时间戳),默认为0(浏览器关闭时失效)
  • $path:有效路径,默认为当前目录
  • $domain:有效域名
  • $secure:是否仅通过HTTPS传输
  • $httponly:是否禁止JavaScript访问
  • $samesite:SameSite属性(Lax/Strict/None),防止CSRF攻击

Cookie的读取

通过$_COOKIE超全局数组获取已设置的Cookie值。重要提示:Cookie在设置后不会立即可用,需要在页面刷新或下一次请求时才能访问。

// 获取所有Cookie
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
// 获取特定Cookie
if (isset($_COOKIE["username"])) {
    echo "Username: " . htmlspecialchars($_COOKIE["username"]);
}

查看已设置的Cookie值

使用$_COOKIE超全局变量

$_COOKIE是一个关联数组,存储了当前页面可通过Cookie访问的所有数据,直接输出该数组即可查看所有已设置的Cookie名称和值:

<?php
// 输出所有Cookie
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
// 安全地查看特定Cookie
$cookieName = "session_id";
if (isset($_COOKIE[$cookieName])) {
    echo "Session ID: " . htmlspecialchars($_COOKIE[$cookieName]);
} else {
    echo "Cookie '{$cookieName}' not found";
}
?>

注意事项

  • $_COOKIE仅能获取当前请求中浏览器发送的Cookie
  • 无法直接查看Cookie的属性(如过期时间、路径等)
  • 对Cookie值进行htmlspecialchars()处理可防止XSS攻击

通过浏览器开发者工具查看

浏览器是验证Cookie最直观的工具,可查看Cookie的完整属性信息:

Chrome/Edge
  1. F12打开开发者工具
  2. 切换到「Application」选项卡
  3. 在左侧「Storage」下展开「Cookies」
  4. 选择对应域名(如http://localhost
Firefox
  1. F12打开开发者工具
  2. 切换到「存储」选项卡
  3. 展开「Cookie」
  4. 选择对应域名
Safari
  1. Option+Command+I打开开发者工具
  2. 切换到「存储」选项卡
  3. 展开「Cookie」

优势

  • 可直接验证Cookie是否成功发送到浏览器
  • 检查所有属性设置(如HttpOnlySecureSameSite等)
  • 实时监控Cookie的变化

查看Cookie的设置参数(代码层面)

直接输出setcookie()的设置逻辑

在设置Cookie时,可将关键参数输出到页面,便于调试:

<?php
$cookieName = "user_preferences";
$cookieValue = json_encode([
    'theme' => 'dark',
    'language' => 'zh-CN',
    'notifications' => true
]);
$expireTime = time() + (30 * 24 * 3600); // 30天后过期
$cookiePath = "/"; // 根路径有效
$cookieDomain = ""; // 当前域名
$cookieSecure = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off';
$cookieHttpOnly = true;
$cookieSameSite = 'Lax';
// 设置Cookie
setcookie(
    $cookieName, 
    $cookieValue, 
    $expireTime, 
    $cookiePath, 
    $cookieDomain, 
    $cookieSecure, 
    $cookieHttpOnly,
    $cookieSameSite
);
// 输出设置信息
echo "<h3>Cookie设置详情:</h3>";
echo "<table border='1' cellpadding='5' cellspacing='0'>";
echo "<tr><td>名称</td><td>" . htmlspecialchars($cookieName) . "</td></tr>";
echo "<tr><td>值</td><td>" . htmlspecialchars($cookieValue) . "</td></tr>";
echo "<tr><td>过期时间</td><td>" . date("Y-m-d H:i:s", $expireTime) . "</td></tr>";
echo "<tr><td>路径</td><td>" . htmlspecialchars($cookiePath) . "</td></tr>";
echo "<tr><td>域名</td><td>" . ($cookieDomain ?: "当前域名") . "</td></tr>";
echo "<tr><td>HTTPS</td><td>" . ($cookieSecure ? "是" : "否") . "</td></tr>";
echo "<tr><td>HttpOnly</td><td>" . ($cookieHttpOnly ? "是" : "否") . "</td></tr>";
echo "<tr><td>SameSite</td><td>" . htmlspecialchars($cookieSameSite) . "</td></tr>";
echo "</table>";
?>

检查$_SERVER中的HTTP请求头

PHP通过$_SERVER['HTTP_COOKIE']获取浏览器发送的Cookie请求头,可间接验证Cookie是否包含预期的值:

<?php
echo "<h3>浏览器发送的Cookie请求头:</h3>";
echo "<pre>" . htmlspecialchars($_SERVER['HTTP_COOKIE'] ?? "无") . "</pre>";
// 解析特定Cookie
if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    echo "<h4>解析的Cookie:</h4>";
    foreach ($cookies as $cookie) {
        $parts = explode('=', trim($cookie));
        if (count($parts) == 2) {
            echo htmlspecialchars($parts[0]) . " = " . htmlspecialchars($parts[1]) . "<br>";
        }
    }
}
?>

使用headers_list()查看响应头

setcookie()函数是通过HTTP响应头设置Cookie的,可通过headers_list()查看已发送的响应头,确认Cookie相关的头信息:

<?php
// 设置多个Cookie
setcookie("session_token", "abc123", time() + 3600, "/", "", true, true);
setcookie("user_id", "456", time() + 86400, "/", "", false, true, "Lax");
setcookie("last_visit", time(), time() + 604800, "/", "", false, false, "Strict");
// 输出所有响应头
$headers = headers_list();
echo "<h3>HTTP响应头中的Cookie设置:</h3>";
echo "<pre>";
foreach ($headers as $header) {
    if (strpos($header, "Set-Cookie:") !== false) {
        echo htmlspecialchars($header) . "\n";
        // 解析Cookie属性
        $cookieParts = explode(";", $header);
        $nameValue = array_shift($cookieParts);
        echo "  - 名称和值: " . htmlspecialchars($nameValue) . "\n";
        foreach ($cookieParts as $part) {
            $part = trim($part);
            if (strpos($part, "expires=") === 0) {
                $timestamp = strtotime(substr($part, 9));
                echo "  - 过期时间: "

标签: #查看cookie #PHP设置