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

Hono框架Cookie设置异常:后端无法获取已配置的Cookie

问题排查与解决方案

核心问题1:登录请求未携带凭证标识

你的前端登录接口的POST请求没有设置withCredentials: true,浏览器收到Set-Cookie响应头时,会因为请求未声明携带凭证而拒绝存储Cookie。

修改前端登录请求代码:

await axios.post(
  `${BACKED_URL_LOCAL}api/v1/user/signin`,
  signInDetails,
  { withCredentials: true } // 必须添加这一行
);
// 调用/me接口获取用户数据
const res = await axios.get(`${BACKED_URL_LOCAL}api/v1/me`,{withCredentials:true});
setUser(res.data.userDetails);

核心问题2:Cookie未显式指定Domain

当前后端在localhost不同端口运行时(比如前端5173、后端3000),浏览器会将不同端口视为不同源。如果Cookie未指定domain: 'localhost',浏览器会默认绑定到当前端口的域名,导致跨端口请求无法携带Cookie。

修改后端Set-Cookie代码,添加Domain配置:

setCookie(ctx, cookie_name, token, {
    httpOnly: true,
    secure: false,       
    sameSite: 'Lax',      
    path: '/',
    maxAge: 60 * 60 * 24,
    domain: 'localhost' // 新增该行
  });

额外验证步骤

  1. 响应头检查:登录接口返回的Set-Cookie头中,确认包含domain=localhost和path=/字段。
  2. 浏览器验证:登录成功后,打开浏览器Application标签页,查看Cookies下的localhost条目,确认目标Cookie已存在。
  3. 后端调试:在/me接口中先打印所有请求Cookie,确认是否能正常接收,再用getCookie提取指定值:
app.get('/api/v1/me', async (ctx) => {
  // 打印所有Cookie用于调试
  console.log('所有请求Cookie:', ctx.req.headers.get('cookie'));
  // 获取指定Cookie
  const token = getCookie(ctx, cookie_name);
  console.log('目标Token:', token);
  // 后续认证逻辑...
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:18:20