Node.js Express 在 Heroku 上设置 cookies 时可能会遇到一些问题,这通常与 Heroku 的环境配置和浏览器的安全策略有关。以下是一些基础概念、可能的原因、解决方案以及相关的应用场景。
Cookies 是存储在用户浏览器上的小型数据片段,用于记住用户信息或跟踪用户行为。在 Node.js 中,可以使用 express-session
或 cookie-parser
中间件来处理 cookies。
SameSite=Lax
,这意味着跨站请求不会携带 cookies,除非是安全的 GET 请求。Secure
属性才能正常工作。以下是一个示例代码,展示如何在 Express 应用中正确设置 cookies,并确保它们在 Heroku 上正常工作:
const express = require('express');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const app = express();
// 使用 cookie-parser 和 express-session 中间件
app.use(cookieParser());
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: true,
cookie: {
secure: process.env.NODE_ENV === 'production', // 仅在生产环境中启用 Secure 属性
sameSite: 'none' // 设置 SameSite 属性为 'none' 以允许跨站请求携带 cookies
}
}));
app.get('/', (req, res) => {
// 设置一个 cookie
res.cookie('username', 'exampleUser', {
maxAge: 900000,
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'none'
});
res.send('Cookie has been set');
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
SameSite=None
时,必须同时设置 Secure
属性。maxAge
和 httpOnly
属性。通过以上步骤,你应该能够在 Heroku 上成功设置和使用 cookies。如果仍然遇到问题,建议检查 Heroku 的日志输出,以获取更多调试信息。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云