> ## Documentation Index
> Fetch the complete documentation index at: https://bun.zhcndoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cookies

> 使用 Bun 内置的 Cookie API 处理 HTTP 请求和响应中的 cookies。

Bun 提供了一个内置 API，用于处理 HTTP 请求和响应中的 cookies。`BunRequest` 对象包含一个 `cookies` 属性，该属性提供了一个 `CookieMap`，用于访问和操作 cookies。在使用 `routes` 时，`Bun.serve()` 会自动追踪 `request.cookies.set`，并将它们应用到响应中。

## 读取 cookies

通过 `BunRequest` 对象上的 `cookies` 属性读取来自请求的 cookies：

```ts theme={"theme":{"light":"github-light","dark":"dracula"}}
Bun.serve({
  routes: {
    "/profile": req => {
      // 访问请求中的 cookies
      const userId = req.cookies.get("user_id");
      const theme = req.cookies.get("theme") || "light";

      return Response.json({
        userId,
        theme,
        message: "个人资料页",
      });
    },
  },
});
```

## 设置 cookies

要设置 cookies，使用 `BunRequest` 对象中 `CookieMap` 的 `set` 方法。

```ts theme={"theme":{"light":"github-light","dark":"dracula"}}
Bun.serve({
  routes: {
    "/login": req => {
      const cookies = req.cookies;

      // 设置一个带有多个选项的 cookie
      cookies.set("user_id", "12345", {
        maxAge: 60 * 60 * 24 * 7, // 1 周
        httpOnly: true,
        secure: true,
        path: "/",
      });

      // 添加一个主题偏好 cookie
      cookies.set("theme", "dark");

      // 请求中被修改的 cookies 会自动应用到响应中
      return new Response("登录成功");
    },
  },
});
```

`Bun.serve()` 会自动追踪请求中被修改的 cookies 并将它们应用到响应中。

## 删除 cookies

要删除 cookie，使用 `request.cookies`（`CookieMap`）对象的 `delete` 方法：

```ts theme={"theme":{"light":"github-light","dark":"dracula"}}
Bun.serve({
  routes: {
    "/logout": req => {
      // 删除 user_id cookie
      req.cookies.delete("user_id", {
        path: "/",
      });

      return new Response("注销成功");
    },
  },
});
```

被删除的 cookies 会作为 `Set-Cookie` 头包含在响应中，`maxAge` 设置为 `0`，值为空字符串。
