Express - Session不会在后续SSE请求之间被保存
Express - Session doesn't get saved between subsequent SSE requests
我正在用Node.js和Express探索服务器发送的事件。我设法设置了请求处理和流的写入,但现在我正在努力进行会话管理,因为我无法在后续调用之间持久化会话。
服务器代码:var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var app = express();
// log all requests
app.use(function(req, res, next) {
console.log(req.method, req.path);
next();
});
app.use(cookieParser());
app.use(session({
secret : 'pretty hard to guess',
resave : false,
saveUninitialized : true
}));
// serve test file
app.get('/', function(req, res) {
res.sendfile(__dirname + '/sandbox/test.html');
});
app.get('/test/:name', function(req, res) {
console.log(req.headers);
// session is empty
console.log(req.session)
req.session.name = req.param('name');
// session.name is set
console.log(req.session);
req.socket.setTimeout(Infinity);
res.type('text/event-stream');
console.log(res._headers)
res.write('retry: 3000'n');
res.write('data: Hello, SSE!'n'n');
});
var server = app.listen(8080, function() {
console.log('listening on port 8080'n');
});
小客户端应用程序:
<!DOCTYPE html>
<html>
<head>
<script>
function sendReq() {
var name = document.getElementById('name').value;
var es = new EventSource('test/' + name);
es.onopen = function() {
var ul = document.getElementById('board');
var li = document.createElement('li');
li.textContent = 'Connected...';
ul.appendChild(li);
};
es.onmessage = function(e) {
var ul = document.getElementById('board');
var li = document.createElement('li');
li.textContent = e.data;
ul.appendChild(li);
};
return false;
}
</script>
</head>
<body>
<form id=sse-form onsubmit="return sendReq();">
<input id=name />
<input type=submit />
<ul id=board></ul>
</form>
</body>
</html>
当访问localhost:8080/
并发送一次我的名字时,我可以看到服务器在控制台记录呼叫并设置会话数据和cookie。
如果我再次发送我的名字,会话cookie被设置,但会话是空的,所以会话cookie被再次发送。
如何在呼叫之间存储会话数据?
resave
句柄告诉会话持久化您的cookie值。否则,您必须在每次请求时手动重新设置它们。
app.use(session({
secret : 'pretty hard to guess',
resave : true, <-----
saveUninitialized : true
}));
引自文档https://github.com/expressjs/session:
resave -强制保存会话,即使未修改。(默认值:真正的)
相关文章:
- ajax请求的顺序总是不同的
- Meteor如何接收HTTP请求
- 有没有一种方法可以防止img get请求使用css或js发生
- 从ajax请求中获取javascript对象
- JSONP请求返回结果,但也触发error_callback
- 在localhost Dev Box上测试JSONP请求的最佳方式
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 在openshift node js应用程序中获取请求
- 反应路由器弄乱了请求网址
- 在我的情况下,如何进行http请求
- 使用密码对话框Javascript请求帮助
- servlet中的请求对象,而不是从jsp接收参数值
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- 如何检测第三方广告服务器请求
- HTML SSE请求正文
- Express - Session不会在后续SSE请求之间被保存