node.js - 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);});
});
}
解决方案
只是为了说明我上面的评论,我实际上已经使用简单的设置进行了快速测试,并且切换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-
但也许还有比您的设置更多的功能。
推荐阅读
- javascript - 使用手动 JavaScript 重定向覆盖服务器文件夹重定向
- react-native - 捆绑错误:语法错误使用 React-native-android-wifi 时出现意外令牌
- c# - c# 到非托管 c++ dll 访问冲突/“框架不在模块中”
- python - 如何在Python的数据框中分别计算每一行中的模式
- node.js - resolve() 函数在承诺中返回未定义
- javascript - Chrome 开发人员工具 - 源选项卡下的片段选项卡中的自动完成和参数提示
- python - Sympy:方程等于零 => 如何去除分母并获得因子?
- python - AttributeError:初始化子类时发生无法设置属性错误
- batch-file - 在 cmd 中运行的命令产生的输出与在 for 循环中解析时不同
- python - pykinect2 从单个像素 KinectV2 中提取深度数据