使用express和socket.io时,如何在socket中获得控制器中赋值的session
发布于 2年前 作者 enkywork 1149 次浏览

控制器部分代码: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中分发这个名字给所有的人,按你所说的话,用户就可以自己随意指定自己的名字了。我实际的应用场景是:在聊天室中,用户发一个消息,其它人会看到是“谁”发的。是不是我这样做有问题呢?

据说牛人很多,咋没有能回答这么常见问题的人儿捏?

socket.io入门 你看看这篇能不能解决你的问题?

io.set('authorization’,callback)

应该直接存到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
});

一句话,好帖,我今天也在困扰这个,一楼的方法不错

回到顶部