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

Node.js会话模块开发异常:访问/admin点击登录后重定向回原页面

问题分析与解决方案

我帮你定位到了问题的核心,主要出在前端jQuery代码的逻辑顺序错误,导致登录请求没有正确携带邮箱信息,后端无法创建有效的会话,所以/admin页面会一直重定向回登录状态。

问题细节

你的$.post请求写在了$('#submit').click事件的外部——这意味着页面刚加载完成就会发送登录请求,而不是点击「提交」按钮的时候。此时email和password变量还没有被赋值,后端收到的是undefined,自然无法设置有效的会话,所以访问/admin时会判定你未登录,重回到登录流程。

另外,你没有阻止提交按钮的默认行为,可能会引发页面刷新,干扰AJAX请求的正常执行。

修复后的代码

修正后的 index.html

<!DOCTYPE html>
<html>
<head>
 <title>Login Page</title>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
</head>
<script type="text/javascript">
 $(document).ready(function(){
  $('#submit').click(function(e){
    // 阻止按钮默认的提交行为,避免页面刷新
    e.preventDefault();
    
    var email = $("#email").val();
    var password = $("#password").val();

    // 简单校验,确保邮箱不为空
    if(!email) {
      alert("请输入邮箱");
      return;
    }

    // 把POST请求放在点击事件内部,确保点击时才发送
    $.post("/login", { email: email, password: password }, function(data){
      if(data === 'done') {
        window.location.href = "/admin";
      }
    });
  });
 });
</script>
<body>
 Email <input type="text" id="email" name=""><br>
 Password <input type="password" id="password" name=""><br>
 <input type="submit" id="submit">
</body>
</html>

后端代码优化建议(可选但重要)

你当前全局声明了sess变量,这在多用户场景下会导致会话冲突(比如A用户的会话会被B用户覆盖)。建议去掉全局的sess,每次直接从req.session获取:

// 去掉全局的 var sess;
app.get('/', function(req, res){
 const sess = req.session; // 改为局部变量
 if(sess.email) {
  res.redirect('/admin');
 } else {
  res.render('index.html');
 }
});

app.post('/login', function(req, res) {
 const sess = req.session; // 局部变量
 sess.email = req.body.email;
 res.end('done');
});

app.get('/admin', function (req, res){
 const sess = req.session; // 局部变量
 if(sess.email) {
  res.write('<h1>Hello '+sess.email+'</h1><br>');
  res.end('<a href="/logout">Logout</a>');
 } else {
  res.write('<h1>Please login first.</h1>');
  res.end('<a href="/">Login</a>');
 }
});

测试步骤

  1. 替换上述修正后的代码
  2. 重启你的Node.js服务
  3. 访问http://localhost:8000,输入邮箱后点击提交,就能正常跳转到/admin页面了

内容的提问来源于stack exchange,提问作者Vikal Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:55:01