cookie如何设置永不过期?

在 PHP 中,设置一个永不过期的 cookie 实际上是不可能的,因为所有 cookie 都有一个过期时间。不过,可以将 cookie 的过期时间设置为一个非常远的将来日期,以达到几乎“永不过期”的效果。

设置一个几乎永不过期的 Cookie

要设置一个非常远的过期时间,可以使用 setcookie() 函数并将过期时间设置为一个很大的时间戳。以下是详细的步骤和示例代码:

步骤

  1. 选择一个远未来的时间戳:通常选择 10 年或更久的时间。
  2. 使用 setcookie() 函数设置 cookie:指定过期时间参数为这个未来的时间戳。

示例代码

假设我们要设置一个名为 user 的 cookie,值为 JohnDoe,并设置其过期时间为 10 年后:

php
<?php // 设置一个非常远的过期时间,比如 10 年 $expiry_time = time() + (10 * 365 * 24 * 60 * 60); // 10 年的秒数 // 设置 cookie setcookie("user", "JohnDoe", $expiry_time, "/"); // 输出 cookie 信息 if(isset($_COOKIE["user"])) { echo "User is: " . $_COOKIE["user"]; } else { echo "Cookie is not set."; } ?>

详细解释

  • time():返回当前的 Unix 时间戳。
  • 10 * 365 * 24 * 60 * 60:计算 10 年的秒数(365 天/年,24 小时/天,60 分钟/小时,60 秒/分钟)。
  • $expiry_time:计算后的过期时间戳。
  • setcookie("user", "JohnDoe", $expiry_time, "/"):设置名为 user 的 cookie,值为 JohnDoe,过期时间为 10 年后,路径为根目录(/)。

其他注意事项

  1. 路径和域:如果希望 cookie 在特定的路径或域内有效,可以通过设置路径和域参数来实现。例如,setcookie("user", "JohnDoe", $expiry_time, "/path/", "example.com");
  2. HTTPS 和 HttpOnly:如果需要,可以设置 securehttponly 参数来提高安全性。
    php
    setcookie("user", "JohnDoe", $expiry_time, "/", "", true, true);
    • 第六个参数(true)表示仅通过 HTTPS 发送 cookie。
    • 第七个参数(true)表示 cookie 仅通过 HTTP 协议访问,不能通过 JavaScript 访问。

总结

虽然无法设置真正“永不过期”的 cookie,但可以通过将过期时间设置为非常遥远的未来来实现几乎永不过期的效果。通过以上示例和详细解释,你可以轻松地在 PHP 中设置这样的 cookie。