Express会话验证失效,主页无法根据会话自动重定向至casino页面
Express会话验证失效,主页无法根据会话自动重定向至casino页面
嘿,我瞅了你的代码,发现几个关键问题导致自动重定向没生效,咱们一步步来改:
缺少主页的GET请求处理路由
你现在的server.js只写了POST '/'的路由,但用户访问主页(比如直接输入http://localhost:3000)是发送GET请求,这时候服务器根本不会执行任何会话检查的逻辑。必须添加一个GET '/'的路由来处理这个核心场景。在Node.js里误用了浏览器端API
你在POST路由里写了document.location.href = 'http://localhost:3000/casino.html'——这是浏览器专属的JS代码,Node.js环境根本不认识document对象,这行代码会直接报错,而且逻辑上后端也不该做前端的跳转操作,应该交给前端处理或者用Express的res.redirect()。会话检查逻辑放错了位置
你把“检查会话是否存在,存在就跳转”的逻辑写在了登录用的POST接口里,但实际上这个逻辑应该放在主页的GET请求处理中,这样用户每次访问主页都会触发会话检查。
修改后的关键代码片段
1. 添加主页GET路由(server.js)
在app.post('/', ...)之前加上这段代码:
// 处理主页GET请求,自动检查会话 app.get('/', (req, res) => { // 从cookie中提取sessionId const sessionId = req.headers.cookie?.split('=')[1]; // 检查session是否有效 const userSession = sessions[sessionId]; if (userSession) { // 会话有效,直接重定向到casino页面 return res.redirect('/casino.html'); } // 无有效会话,返回登录页面(express.static会自动加载client目录下的index.html) res.sendFile('index.html', { root: './client' }); });
2. 修复POST路由里的错误代码
删掉POST路由里的document.location.href = ...(这行代码在Node.js里完全无效),同时完善Cookie的设置(提升安全性和有效性):
// 替换原来的res.set('Set-Cookie', ...) res.set('Set-Cookie', `session=${sessionId}; Path=/; HttpOnly; SameSite=Lax`);
Path=/:确保cookie在整个站点的所有路径下都能被携带;HttpOnly:防止恶意脚本通过JS读取cookie,避免XSS攻击;SameSite=Lax:限制cookie跨站发送,提升安全性。
3. 额外提醒:避免SQL注入风险
你现在用字符串拼接生成SQL语句,存在严重的SQL注入风险,赶紧改成参数化查询:
// 原来的危险写法 // const loginCode = `select * from users where nickname="${req.body.nickname}"`; // 改成参数化查询 const loginCode = 'SELECT * FROM users WHERE nickname = ?'; pool.query(loginCode, [req.body.nickname], (err, result) => { // 后续逻辑保持不变 });
修改后的流程说明
- 用户访问主页,服务器检查cookie中的sessionId:
- 如果session有效,自动重定向到
casino.html; - 如果无效,显示登录页面;
- 如果session有效,自动重定向到
- 用户提交昵称和密码,POST接口处理注册逻辑,设置cookie后返回JSON;
- 前端收到
UserIsCreated消息后,跳转到casino.html; - 之后用户再访问主页,GET路由会自动检测到有效会话,完成重定向。
备注:内容来源于stack exchange,提问作者Hehe Aco
相关产品推荐
相关产品推荐

