Nodejs 服务器无法识别保存的 cookie sessionId



我有一个nodejs/express服务器,代码为

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cookieparser = require("cookie-parser");
const { randomBytes } = require('crypto');
const COOKIE_SECRET = 'aavslrhe158ewuycvasjy7et2hvh2ytt0';
var SESSIONS = {};

app.use(
express.static(__dirname + '/public'),
bodyParser.urlencoded({ extended: false }),
bodyParser.json(),
cookieparser(COOKIE_SECRET)
);

app.get("/login", function (request, response){
response.sendFile(__dirname + "/views/login.html");
});
app.post("/verifyaccount", function (request, response){
const nextSessionId = randomBytes(16).toString('base64');
response.cookie("sessionId", nextSessionId, { maxAge: 3600, httpOnly: true, Secure: true });
SESSIONS[nextSessionId] = request.body.sz_Username;
response.status(response_status).redirect('/admin');
}
app.get("/admin", function (request, response){
if(!is_authorized(request.cookies.sessionId)){
response.redirect('/login');
}
else{
response.sendFile(__dirname + "/views/admin.html");
}
});
app.post("/addproject", function(request, response){
if(!is_authorized(request.cookies.sessionId)){
response.redirect('/login');
}
else{
}
}

function is_authorized(sessionId){
var authorized = false;
if (SESSIONS[sessionId]) {
authorized = true;
}
return authorized;
}

因此,当我登录时,凭据会转到/verifyaccount,在那里我会检查它们是否正确。然后它在我的浏览器中创建一个cookie:sessionId:"KlS6xuspQ4GczVqqpSc2Nw%3D%3D",并将其存储在SESSIONS变量中。我被重定向到/admin,授权在那里工作

但当我在admin.html中并将数据发送到/addproject时,由于授权失败,我会重定向到/login。request.cookies.sessionId未定义。cookie一直存在于我的浏览器中,所以我不知道问题出在哪里,因为cookie在/admin中是正确的。

编辑:在从/login重定向到/admin之后,如果我回到/login或/,然后尝试从url重定向到/aadmin,我会得到同样的未定义错误。这不应该发生,因为cookie在1小时后过期。

">maxAge以毫秒为单位。您的cookie将在您设置后3.6秒过期";-俱乐部789 htb

最新更新