SvelteKit应用使用网络URL时Cookie无法存储认证Token问题
问题根源
用localhost访问时Cookie正常,但用192.168.1.20这类局域网IP登录时,浏览器不存储Token Cookie,核心原因是Cookie的domain属性未适配当前请求的IP地址。SvelteKit的event.cookies.set默认domain设置在IP访问场景下不匹配,导致浏览器拒绝保存Cookie。
修复代码
修改登录逻辑里的Cookie设置,显式配置domain: undefined,让浏览器自动适配当前请求的域名/IP:
// src/routes/login/+page.server.ts event.cookies.set(TOKEN, token, { path: "/", domain: undefined, // 关键:让浏览器自动匹配当前访问的IP或域名 httpOnly: true, // 可选:提升安全性,防止XSS攻击 secure: process.env.NODE_ENV === 'production', // 生产环境启用HTTPS时开启 sameSite: 'lax' // 可选:降低CSRF风险 })
为什么这样有效
domain: undefined会让浏览器根据当前请求的URL自动设置Cookie的domain,不管是localhost还是局域网IP都能正确匹配。- 如果硬编码domain为
192.168.1.20,会导致localhost访问时无法读取Cookie,所以用undefined是更通用的方案。
验证步骤
- 修改代码后重启服务
- 用
192.168.1.20:5173登录 - 打开浏览器开发者工具 → Application(或Storage)→ Cookies,检查是否存在Token对应的Cookie
- 在
hooks.server.ts中添加console.log(token),确认钩子能正常读取到Token
内容的提问来源于stack exchange,提问作者Ölavur Nón
相关产品推荐
相关产品推荐

