📜  检查 cookie 客户端 - Javascript (1)

📅  最后修改于: 2023-12-03 15:26:43.145000             🧑  作者: Mango

检查 Cookie 客户端 - JavaScript

本文介绍如何使用 JavaScript 检查客户端是否启用了 Cookie,并如何读取、写入和删除 Cookie。

检查客户端是否启用了 Cookie

当客户端启用 Cookie 时,浏览器会在每个 HTTP 请求中发送 Cookie 到服务器。因此,我们可以通过检查请求头来确定客户端是否启用了 Cookie。

以下代码演示了如何检查客户端是否启用了 Cookie:

function areCookiesEnabled() {
  var cookiesEnabled = navigator.cookieEnabled;

  if (!cookiesEnabled) {
    document.cookie = 'testCookie';
    cookiesEnabled = document.cookie.indexOf('testCookie') !== -1;
  }

  return cookiesEnabled;
}

if (areCookiesEnabled()) {
  console.log('Cookies enabled');
} else {
  console.log('Cookies disabled');
}
读取 Cookie

要读取 Cookie,可以使用 document.cookie 属性。它返回一个字符串,包含所有的 Cookie,每个 Cookie 之间用分号和空格分隔。例如:

document.cookie = 'name=alice';
document.cookie = 'age=30';

var cookies = document.cookie;
console.log(cookies); // "name=alice; age=30"

注意,document.cookie 可以读取 HTTP 请求中的所有 Cookie,包括由其他域设置的 Cookie。因此,如果要读取指定的 Cookie,请确保匹配正确的 Cookie 名称。

以下代码演示了如何读取指定的 Cookie:

function getCookie(name) {
  var value = '; ' + document.cookie;
  var parts = value.split('; ' + name + '=');
  
  if (parts.length === 2) {
    return parts.pop().split(';').shift();
  }
}

var name = getCookie('name');
console.log(name); // "alice"
写入 Cookie

要写入 Cookie,可以使用 document.cookie 属性。它的值是一个字符串,格式为 name=value; expires=date; path=path; domain=domain; secure。其中,namevalue 是必需的。如果没有设置 expires,默认情况下,Cookie 的生命周期是浏览器会话期间。

以下代码演示了如何写入 Cookie:

document.cookie = 'name=alice';
document.cookie = 'age=30; expires=' + new Date('2022-10-01').toUTCString() + '; path=/';

console.log(document.cookie); // "name=alice; age=30"
删除 Cookie

要删除 Cookie,可以将其过期日期设置为过去的日期。过期日期需要以 UTC 格式表示。

以下代码演示了如何删除指定的 Cookie:

function deleteCookie(name) {
  document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

deleteCookie('name');

console.log(document.cookie); // "age=30"
结论

本文介绍了如何检查客户端是否启用了 Cookie,并如何读取、写入和删除 Cookie。请注意,在某些情况下,客户端可能已经禁用了 Cookie,但 navigator.cookieEnabled 返回 true,因此建议将上述代码与服务器端一起使用,以确保最佳的 Cookie 支持。