Javascript 简明教程

JavaScript cookie 属性用于设置 cookie 的附加信息,例如路径、域、到期日期等。在 JavaScript 中,您可以在设置新 cookie 或更新 cookie 时指定 cookie 属性。例如,您可以使用 'expires' 属性设置 cookie 的到期日期。

简单来说,cookie 属性用于控制 cookie 的行为以及在浏览器中如何使用 cookie。

此处,我们在下表中列出了所有 cookie 属性及其说明。

Attribute

Description

Default Value

Name/Value

用于将 cookie 存储在浏览器中。

Domain

指定对其 cookie 有效的域。

域名的网站。例如,tutorialspoint.com

Path

设置 Cookie 的目录或网页的路径。

/ (entire domain)

Expires

用于指定 Cookie 应过期的日期和时间。

Current session

Max-Age

用于指定 Cookie 过期后的时限。

Current session

Secure

如果此字段包含单词“secure”,则只能使用安全服务器检索 Cookie。如果此字段为空,则不存在此类限制。

false

HttpOnly

它防止通过 JavaScript 访问 Cookie 以确保 Cookie 安全。

false

SameSite

用于指定如何处理第三方 Cookie。

Lax

Priority

它定义 Cookie 的优先级。

1000

Site/Service

获取Cookie 来源网站的信息。

SourcePort

获取 Cookie 来源的端口。

StoragePartition

它定义将哪个存储分区用于存储 Cookie。

Size

它表示 Cookie 的大小。

大小取决于文本长度。

但是,最重要的是,属性是可选的。

此外,你无法操作 Cookie 的所有属性。浏览器设置一些属性。

Check the Attribute Value in the Browser

你可以将属性设置为 Cookie,但无法访问这些属性。要检查是否设置了该属性,可以使用浏览器控制台。

按照以下步骤在浏览器控制台中检查 Cookie。

Step 1 - 在浏览器中单击鼠标右键。它将打开菜单。你需要选择“检查”选项。它将打开开发者工具。

cookie attributes step1

Step 2 - 之后,你需要转到“应用程序/存储”选项卡。

cookie attributes step2

Step 3 − 在边栏中,选择“cookies”。

cookie attributes step3

Step 4 − 现在,单击任何 cookie 以检查它们的名称、值和其他属性值。

cookie attributes step4

上述步骤仅适用于 Chrome 网络浏览器。根据所使用的浏览器,步骤可能有所不同。

这里,你将逐个学习每个属性及其示例。

Cookie’s Name/Value Attribute

名称属性用于存储 cookie 数据。它将数据作为值。如果你想在“名称”属性的值中使用特殊字符,则需要使用 encodeURIComponent() 方法对文本进行编码。

Syntax

遵循以下语法设置 cookie 的名称属性。

let value = encodeURIComponent(cookieValue);
document.cookie = "name=" + value + ";";

在上述语法中,我们使用 encodeURIComponent() 方法对“cookieValue”进行了编码,并将编码后的值用作名称属性值。

Example

在下面的代码中,我们设置了值为“false”的“已订阅”cookie。你可以单击读取 cookie 按钮以获取 cookie。

<html>
<body>
	<p id = "output"> </p>
	<button onclick = "setCookies()"> Set Cookie </button> <br> <br>
	<button onclick = "readCookies()"> Read Cookies </button>
	<script>
		let output = document.getElementById("output");
		function setCookies() {
			document.cookie = "subscribed=false"; // name-value pair
			output.innerHTML = "Cookie setting successful!";
		}
		function readCookies() {
			const allCookies = document.cookie.split("; ");
			output.innerHTML = "The subscribed cookie is - <br>";
			for (const cookie of allCookies) {
				const [name, value] = cookie.split("=");
				if (name == "subscribed") {
					output.innerHTML += `${name} : ${decodeURIComponent(value)} <br>`;
				}
			}
		}
	</script>
  </body>
</html>

Cookie’s Path Attribute

路径属性用于设置 cookie 的范围。它定义了应在网站上的何处访问 cookie。你可以将相对路径或绝对路径设置为路径属性值。

如果你设置相对路径,则可以在特定目录或子目录的任何地方访问所有 cookie。

Syntax

遵循以下语法在 cookie 中设置路径属性。

document.cookie = "name=value;path=pathStr";

在上述语法中,你需要将“pathStr”替换为实际路径字符串。

Example

在下面的代码中,我们设置了 cookie 的路径。此处,我们设置了“/”(home 路由)。因此,可以在网站的每个网页上访问 cookie。你可以尝试在网站的不同网页上获取 cookie。

<html>
<body>
	<button onclick = "setCookies()"> Set Cookie </button>
	<p id = "output"> </p>
	<button onclick = "readCookies()"> Read Cookies </button>
	<script>
		let output = document.getElementById("output");
		function setCookies() {
			document.cookie = "signIn=true; path=/";
			output.innerHTML = "Cookie set successful!";
		}
		function readCookies() {
			const allCookies = document.cookie.split("; ");
			output.innerHTML = "The cookie is : <br>";
			for (const cookie of allCookies) {
				const [key, value] = cookie.split("=");
				if (key == "signIn") {
					output.innerHTML += `${key} : ${decodeURIComponent(value)} <br>`;
				}
			}
		}
	</script>
</body>
</html>

“expires”属性用于设置 cookie 的到期日期。它将日期字符串作为值。

Syntax

遵循以下语法在 cookie 中设置 expires 属性。

document.cookie = "name=value;expires=dateStr";

在上述语法中,你需要将“dateStr”替换为日期字符串。

Example

在下面的代码中,我们设置了 product cookie。此外,我们设置了 2050 年的到期日期。

你可以尝试设置过去的到期日期并尝试访问 cookie。你将无法找到 cookie。

<html>
<body>
	<p id = "output"> </p>
	<button onclick = "setCookies()"> Set Cookie </button> <br> <br>
	<button onclick = "readCookies()"> Read Cookies </button>
	<script>
		let output = document.getElementById("output");
		function setCookies() {
			document.cookie = "product=mobile;expires=12 Jan 2050 12:00:00 UTC";
			output.innerHTML = "Cookie Set Successful!";
		}
		function readCookies() {
			const allCookies = document.cookie.split("; ");
			output.innerHTML = "The cookie is : <br>";
			for (const cookie of allCookies) {
				const [key, value] = cookie.split("=");
				if (key == "product") {
					output.innerHTML += `${key} : ${decodeURIComponent(value)} <br>`;
				}
			}
		}
	</script>
</body>
</html>

Cookie’s maxAge Attribute

“maxAge”属性是“expires”属性的替代方法。它用于指定 cookie 的生存期。它以秒为单位获取值。

当 cookie 的生命周期结束时,它将被自动删除。

Syntax

遵循以下语法将“maxAge”特性传递给 cookie。

document.cookie = "name=value;max-ge=age;";

在上述语法中,您需要将“age”替换为秒数。

Example

在下面的代码中,我们将总秒数设置为 10 天,作为 maxAge 特性的值。您可以为 cookie 设置 1 秒的生存期,并尝试在 1 秒后访问该 cookie。

<html>
<body>
	<button onclick = "setCookies()"> Set Cookie </button>
	<button onclick = "readCookies()"> Read Cookies </button>
	<p id = "output"> </p>
	<script>
		const output = document.getElementById("output");
		function setCookies() {
			document.cookie = "token=1234wfijdn;max-age=864000";
		}
		function readCookies() {
			const allCookies = document.cookie.split("; ");
			output.innerHTML = "The cookie is : <br>";
			for (const cookie of allCookies) {
				const [key, value] = cookie.split("=");
				if (key == "token") {
					output.innerHTML += `${key} : ${decodeURIComponent(value)} <br>`;
				}
			}
		}
	</script>
</body>
</html>

域特性用于指定 cookie 所适用的域名。您所提出请求中的域的默认值。您可以设置域特性来设置子域。

Syntax

遵循以下语法在 cookie 中设置域特性的值。

document.cookie = "name=value;domain:domain_name ";

在上述语法中,将“domain_name”替换为实际域名,例如 example.com。

Example

在下面的代码中,我们为 cookie 设置“tutorialspoint.com”域名。

<html>
<body>
	<p id = "output"> </p>
	<button onclick = "setCookies()"> Set Cookie </button>
	<button onclick = "readCookies()"> Read Cookies </button>
	<script>
		const output = document.getElementById("output");
		function setCookies() {
			document.cookie = "username=abcd;domain:tutorialspoint.com";
		}
		function readCookies() {
			const allCookies = document.cookie.split("; ");
			output.innerHTML = "The cookie is : <br>";
			for (const cookie of allCookies) {
				const [key, value] = cookie.split("=");
				if (key == "username") {
					output.innerHTML += `${key} : ${decodeURIComponent(value)} <br>`;
				}
			}
		}
	</script>
</body>
</html>

同样,您还可以更新特性值。例如,您可以延长 cookie 的过期时间。