You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中间件中无法删除Cookie的问题及解决方法

Next.js中间件删除Cookie后仍能读取到值的问题解决

你在Next.js中间件中尝试删除access_token Cookie,但执行删除操作后,通过req.cookies.get('access_token')仍能获取到原有值,使用的代码如下:

import type { NextFetchEvent, NextRequest } from "next/server";
import { NextResponse } from "next/server";
export function middleware(req: NextRequest, ev: NextFetchEvent) {
  const cookie = req.cookies.get('access_token')?.value;
  const headers: any = req.headers;
  const response = NextResponse.next();

  console.log('req.headers ', headers.get('logout'))
  if (headers.get('logout')) {
    console.log(cookie);
    response.cookies.delete('access_token');
    console.log(req.cookies.get('access_token')?.value); // still logs the cookie
  }

  return response;
}

问题原因

  • req.cookies存储的是客户端发送请求时携带的Cookie数据,请求一旦到达服务器,这个值就已经固定,不会因为修改响应对象的Cookie而改变。
  • response.cookies.delete('access_token')的作用是在响应头中添加删除Cookie的指令,通知客户端浏览器删除对应Cookie,而非修改当前请求的Cookie内容。

正确处理方式

要验证删除操作是否生效,需检查响应对象的Cookie状态,而非请求对象。另外,如果设置Cookie时指定了域名、路径等属性,删除时需保持一致,否则删除指令可能无效。

修改后的代码示例:

import type { NextFetchEvent, NextRequest } from "next/server";
import { NextResponse } from "next/server";
export function middleware(req: NextRequest, ev: NextFetchEvent) {
  const headers = req.headers;
  const response = NextResponse.next();

  console.log('req.headers ', headers.get('logout'))
  if (headers.get('logout')) {
    // 记录请求中的原有Cookie值
    console.log('请求中的access_token:', req.cookies.get('access_token')?.value);
    
    // 删除响应中的Cookie,若设置时指定了域名/路径,需对应添加
    response.cookies.delete('access_token', {
      path: '/', // 默认路径为'/',若设置时不同需修改
      // domain: 'your-domain.com', // 若设置了域名,需匹配该值
    });

    // 检查响应中的Cookie状态,确认是否已删除
    console.log('响应中的access_token:', response.cookies.get('access_token')?.value); // 应返回undefined
  }

  return response;
}

额外说明

  • 客户端浏览器收到响应后,会根据响应头指令删除Cookie,后续发起的请求将不再携带该Cookie。
  • 若删除后客户端仍存在Cookie,检查Cookie的域名、路径属性是否与删除指令匹配,不匹配会导致删除失败。

内容的提问来源于stack exchange,提问作者kittu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:35:25