title: useCookie函数:管理SSR环境下的Cookie
date: 2024/7/13
updated: 2024/7/13
author:
cmdragon
excerpt:
摘要:本文详述了useCookie函数在服务器端渲染(SSR)中的应用,包括读写Cookie、配置选项如maxAge、expires、httpOnly、secure、domain、path及SameSite,并提供了encode、decode、default、watch等高级用法示例,以及如何在API路由中操作Cookie。
categories:
tags:
扫描
二维码
关注或者微信搜一搜:
编程智域 前端至全栈交流与成长
useCookie
是一个在服务器端渲染(SSR)环境中管理 Cookie 的工具函数。它允许开发者在页面、组件或插件中读取和写入 Cookie。这个函数通过创建一个响应式引用(ref)来管理 Cookie 的值,并自动将 Cookie 的值序列化和反序列化为 JSON 格式,以确保在不同环境(如浏览器和服务器)之间的一致性。
useCookie
函数接受两个参数:
下面的示例创建了一个名为
counter
的cookie。如果该cookie不存在,它将被初始设置为一个随机值。每当我们更新
counter
变量时,cookie也会相应地更新。
app.vue
<script setup>
const counter = useCookie('counter')
counter.value = counter.value || Math.round(Math.random() * 1000)
</script>
<template>
<div>
<h1>计数器: {{ counter || '-' }}</h1>
<button @click="counter = null">重置</button>
<button @click="counter--">减少</button>
<button @click="counter++">增加</button>
</div>
</template>
maxAge
expires
maxAge
maxAge
maxAge
expires
maxAge
maxAge
expires
maxAge
Set-Cookie: mycookie=123; max-age=3600;
expires
expires
Wdy, DD-Mon-YYYY HH:MM:SS GMT
expires
Set-Cookie: mycookie=123; expires=Thu, 01 Dec 2023 12:00:00 GMT;
maxAge
expires
maxAge
expires
maxAge
maxAge
expires
在实际应用中,通常建议只使用
maxAge
或
expires
中的一个,以避免潜在的不一致性和兼容性问题。如果需要cookie在用户关闭浏览器后仍然存在,可以使用
maxAge
。如果需要cookie在特定日期和时间后过期,则使用
expires
。
以下是一个使用
maxAge
和
expires
的示例:
// 使用 maxAge
res.setHeader('Set-Cookie', 'mycookie=123; max-age=3600;');
// 使用 expires
res.setHeader('Set-Cookie', 'mycookie=123; expires=Thu, 01 Dec 2023 12:00:00 GMT;');
httpOnly
httpOnly
是一个用于设置cookie属性的布尔值,它的主要目的是增强Web应用程序的安全性。
httpOnly
httpOnly
true
document.cookie
httpOnly
httpOnly
httpOnly
true
false
true
false
httpOnly
在实际应用中,建议对所有涉及身份验证、敏感信息的cookie设置
httpOnly
属性。例如,对于存储用户会话ID的cookie,应该始终设置
httpOnly
。
以下是如何在设置cookie时使用
httpOnly
属性的示例:
// 设置 httpOnly 为 true
res.setHeader('Set-Cookie', 'sessionToken=abc123; httpOnly;');
// 在某些服务器框架中,可能需要这样设置
// res.cookie('sessionToken', 'abc123', { httpOnly: true });
httpOnly
true
document.cookie
httpOnly
通过使用
httpOnly
,您可以显著提高应用程序的安全性,减少XSS攻击的风险。
secure
secure
是另一个用于设置cookie属性的布尔值,它的目的是确保cookie仅通过安全的HTTPS连接发送到服务器。下面是关于
secure
属性的详细信息:
secure
secure
true
secure
secure
secure
true
false
true
false
secure
在实际应用中,对于包含敏感信息的cookie,如会话cookie,通常建议设置
secure
属性为
true
。
以下是如何在设置cookie时使用
secure
属性的示例:
// 设置 secure 为 true
res.setHeader('Set-Cookie', 'sessionToken=abc123; secure;');
secure
true
secure
secure
secure
domain
domain
属性在设置
Set-Cookie
的时候用于指定 cookie 的作用域。这个属性允许你定义 cookie 可以被哪些子域名或顶级域访问。默认情况下,cookie 只在当前请求的域内有效。
domain
domain
domain
以下是如何在设置 cookie 时使用
domain
属性的示例:
// 设置 domain 为 'example.com'
res.setHeader('Set-Cookie', 'sessionToken=abc123; domain=example.com;');
domain
domain
.example.com
domain
假设你有一个包含多个子域的网站,例如
www.example.com
、
sub.example.com
和
api.example.com
。如果你想让一个 cookie 能在所有这些子域下被访问,你可以设置
domain
为
example.com
:
res.setHeader('Set-Cookie', 'sessionToken=abc123; domain=example.com;');
这样设置后,
sessionToken
将在
www.example.com
、
sub.example.com
和
api.example.com
下都能被访问。
path
path
属性在设置
Set-Cookie
的时候用于指定 cookie 的有效路径。这个属性允许你定义 cookie 可以被哪些路径下的请求访问。默认情况下,路径被设置为当前请求的路径。
path
path
path
以下是如何在设置 cookie 时使用
path
属性的示例:
// 设置 path 为 '/admin'
res.setHeader('Set-Cookie', 'sessionToken=abc123; path=/admin;');
path=/admin
/admin
/admin/settings
path
/user/profile
/user/profile
path
/admin
假设你有一个网站,其中
/admin
路径下的内容需要特殊的 cookie 来验证用户权限。你可以设置
path
为
/admin
:
res.setHeader('Set-Cookie', 'adminToken=xyz789; path=/admin;');
这样设置后,
adminToken
只能在
/admin
及其子路径(如
/admin/settings
)下被访问。
SameSite
encode
decode
default
watch
示例1:
示例2:
余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:
编程智域 前端至全栈交流与成长
,阅读完整的文章:
useCookie函数:管理SSR环境下的Cookie | cmdragon’s Blog
useAppConfig