控制器部分代码:req.session.username =****; app.js部分代码:io.of(/chat).on(connection,function(socket){ //获得req.session.username的值 }) 请问怎么获得到
7 回复
目前还没有找到方法,可以直接在服务器上获取session值的方法
不过话要说话来,因为你刷新一次页面,都会进行一次socket的连接
那么当客户端连接服务器的时候,都会触发socket.io的connection事件
你可以把你session中的值,赋值给一个javascript变量,然后连接的时候会以json格式发送到
服务器,这样你在代码里就可以取到当前session的值了
但我想做的是:“用户”在控制器渲染的页面中提交用户的名字给app.js,然后app.js中分发这个名字给所有的人,按你所说的话,用户就可以自己随意指定自己的名字了。我实际的应用场景是:在聊天室中,用户发一个消息,其它人会看到是“谁”发的。是不是我这样做有问题呢?
应该直接存到cookies里。页面里用document.cookie可以访问cookie。如果只是用户名不建议用session。
不过有sessionid之后是可以查的,举例用默认的MemoryStore,其它的dbsession中间件可以直接去db里根据id查。
设置部分,要自己new一个MemoryStore,然后存在app里(存在哪看习惯):
var store = new MemoryStore({
reapInterval: 60000 * 10
});
app.use(express.session({
store:store
}));
app.set('store',store);
想用的时候:
var store = app.get('store');
store.get(data.sessionId, function(err, session){
var user = session.user;
//foo todo
});