cookie-universal-nuxt服务端部署后刷新页面Cookie数据丢失
问题原因
nuxt.config.js中server.host配置为localhost,部署到服务器后该配置会导致SSR阶段服务端仅监听本地回环地址,无法匹配用户实际访问的域名,服务端读取Cookie时无法获取对应域名下的存储值,刷新页面走SSR渲染时就会表现为Cookie丢失。- Cookie写入时缺少生产环境必要的配置参数:如果部署环境为HTTPS、或存在跨子域访问场景,未配置
secure、sameSite、domain参数时,浏览器会拦截Cookie写入,或写入的Cookie作用域不符合预期,页面刷新后无法读取到对应值。
修复方案
1. 修改服务监听配置
将nuxt.config.js中server.host的值从localhost改为0.0.0.0,让服务监听所有可用网络接口,正确识别实际访问域名:
export default { mode: 'universal', ssr: true, target: 'server', modules: ['cookie-universal-nuxt'], server: { port: 4002, host: '0.0.0.0' } }
2. 补全Cookie写入参数
根据实际部署场景补全Cookie配置项:
同域名无跨子域需求场景
$cookies.set('cart', cookieParams, { path: '/', maxAge: 60 * 60 * 24 * 7, // HTTPS环境开启secure,HTTP环境设为false secure: process.env.NODE_ENV === 'production', // 设置同站点策略,避免浏览器默认拦截 sameSite: 'lax' });
需要跨子域共享Cookie场景
额外添加domain参数,值为你的根域名(前面带点,支持所有子域共享):
$cookies.set('cart', cookieParams, { path: '/', maxAge: 60 * 60 * 24 * 7, secure: process.env.NODE_ENV === 'production', sameSite: 'lax', domain: '.your-domain.com' // 替换为实际业务的根域名 });
注意:如果Nuxt服务前挂载了Nginx等反向代理,需要将请求头中的
host、origin字段原样透传给Nuxt服务,否则SSR阶段仍会因为域名识别错误导致Cookie读写异常。
内容的提问来源于stack exchange,提问作者Md Ali Zinnah
相关产品推荐
相关产品推荐

