首页 > 解决方案 > SessionID 在每个发布请求上生成一个唯一值

问题描述

我试图通过 sessionId 识别我的应用程序上的用户,而不是用户帐户本身的实际信息。但是,我注意到每次用户在页面上执行操作时 sessionId 都会发生变化。如下所示。我的目标是从他们打开网页到关闭网页时拥有相同的 sessionID。

const app = require('express')();
const https = require('https');
const fs = require('fs');
const session = require('express-session');

function getDateTimestamp(){
                var today = new Date();
                var date = today.getFullYear()+'_'+(today.getMonth()+1)+'_'+today.getDate();
                return date;
            }

app.use(session({
    resave: false,
    saveUninitialized: true,
    secret: 'whatever',
    cookie: {
        maxAge: 60*60*1000,
        sameSite: true
    }
}))

app.get('/', (req, res) => {
    res.writeHead(200, {'Content-Type': 'text/html'});
  var readStream = fs.createReadStream('index.html','utf8');
  readStream.pipe(res);
});

app.post('/:fieldName/:flag/:time/:dashboard/:identifier/:user', (req, res) => {
    console.log('POST message received', req.params);
    if (req.params && req.params.fieldName) {
        fs.appendFileSync(`./changeLog_${getDateTimestamp()}.csv`, `${req.params.fieldName},${req.params.flag},${req.params.time},${req.params.dashboard},${req.params.identifier},${req.params.user},${req.sessionID}\n`);
        return res.send('OK')
    }
    res.status(400).end()
});

客户端

function onParameterChange (parameterChangeEvent) {
                parameterChangeEvent.getParameterAsync().then(function (param) {
                    parameterIndicator = 'Parameter'
                    const details = {
                        method: 'POST',
                        credentials: 'include'
                        //body: JSON.stringify(data),
                        //  headers: {
                        //      'Content-Type': 'application/json'
                        //  }
                    };
                    fetch(`url/${param.name}/${parameterIndicator}/${getDateTimestamp()}/${dashboardName}/${param.name}/${worksheetData}`, details).then((res) => {console.log(res);});
                });
            }

这是我的输出,显示同一用户的不同会话。 在此处输入图像描述

标签: node.jsexpressexpress-session

解决方案


只是为了说明我上面的评论,我实际上已经使用简单的设置进行了快速测试,并且切换saveUninitialized实际上似乎有所作为:

// app.js
const express = require('express')
const app = express()
const session = require('express-session')

// Run the file as "node app false" or "node app true" to toggle saveUninitialized.
const saveUninitialized = process.argv[2] == "true" ? true : false

app.use(session({
    resave: false,
    saveUninitialized,
    secret: 'whatever',
    cookie: {
        maxAge: 60 * 60 * 1000,
        sameSite: true
    }
}))

app.get("/", (req, res) => {
    res.status(200).send(req.sessionID)
})

app.listen(3000, () => {
    console.log('server started on http://localhost:3000')
})

// Response body
node app false
// 1st request: OTnFJD-r1MdiEc_8KNwzNES84Z0z1kp2
// 2nd request: 5UVVGng_G72Vmb5qvTdglCn9o9A4N-F6
// 3rd request: 9aGsAwnHh1p1sgINa1fMBXl-oRKcaQjM
node app true
// 1st request: StUrtHOKBFLSvl5qoFai6OQCm7TY87U-
// 2nd request: StUrtHOKBFLSvl5qoFai6OQCm7TY87U-
// 3rd request: StUrtHOKBFLSvl5qoFai6OQCm7TY87U-

但也许还有比您的设置更多的功能。


推荐阅读