new*_*bie 9 sockets session node.js express
我在登录功能中这样做
app.post('/teacherlogin', function(request, response) {
var username = request.body.username;
var password = request.body.password;
con.query('SELECT t_id from login_teacher where username="'+username+'" and password="'+password+'"',function(err,results){
if(results.length > 0) {
request.session.regenerate(function(){
request.session.user = username;
request.session.type = 'teacher';
request.session.id = results[0].t_id;
response.redirect('/teacherhome');
});
} else {
response.redirect('teacherlogin');
}
});
});
Run Code Online (Sandbox Code Playgroud)
现在我想发出我已存储到会话对象的'id'和'type'.我该怎么做?我读过这篇文章,但由于缺乏经验,我在使用它时遇到了困难.我在我的代码中使用过它
var MemoryStore = express.session.MemoryStore;
var sessionStore = new MemoryStore();
app.use(express.bodyParser());
app.use(express.cookieParser('secret text'));
app.use(express.session({
store: sessionStore,
secret: 'secret',
key: 'express.sid'}
));
Run Code Online (Sandbox Code Playgroud)
和
var Session = require('connect').middleware.session.Session;
io.set('authorization', function (data, accept) {
if (data.headers.cookie) {
data.cookie = require('cookie').parse(data.headers.cookie);
data.sessionID = data.cookie['express.sid'].split('.')[0];
console.log('data.sessionID "'+data.sessionID);
data.sessionStore = sessionStore;
sessionStore.get(data.sessionID, function (err, session) {
if (err || !session) {
accept('Error', false);
} else {
data.session = new Session(data, session);
accept(null, true);
}
});
} else {
return accept('No cookie transmitted.', false);
}
});
Run Code Online (Sandbox Code Playgroud)
我在会话对象中没有得到任何东西.我试着记录sessionStore的内容,它似乎是空的!这是否意味着我在会话中存储的信息没有存储在sessionStore中?如果是的话,我应该怎么做才能存储它?如果它存储在那里,为什么sessionStore.get函数无法找到它?
我不确定你是否还在为此工作,但你只需要一个MemoryStore即可访问会话数据.毕竟如果它不起作用,Express会如何使用它呢?:)
演示MemoryStore工作的一种简单方法是:
var express = require("express")
, app = express()
, sessionStore = new express.session.MemoryStore();
// middleware
app.use(express.cookieParser());
app.use(express.session({store: sessionStore, secret: "mysecret"}));
// any endpoint sets a cookie
app.get("/", function(req,res) {
res.send('ok');
});
// This endpoint reveals it
app.get("/session", function(req, res){
sessionStore.get(req.sessionID, function(err, data) {
res.send({err: err, data:data});
});
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
点击/后面的/session结果是:
{
"err": null,
"data": {
"cookie": {
"originalMaxAge": null,
"expires": null,
"httpOnly": true,
"path": "/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑你的问题可能是你如何从套接字获取sessionID,但绝对可以从MemoryStore中提取会话.此外,请记住,重新启动Express服务器会破坏所有会话,因此每次重新启动后都需要一个新的cookie.
您必须使用数据库来存储您的快速会话,然后解析socket.io定义中的cookie数据,并使用获得的信息从数据库中获取会话信息,这是一个完整的示例:
您还可以使用从 cookie 解析的会话 ID,并使用会话名称将用户加入“聊天室”。
| 归档时间: |
|
| 查看次数: |
13431 次 |
| 最近记录: |