在java(jsp)中可以很轻松的获得当前会话id,只需要,session.getId(),即可,但是在nodejs中,通过req.sessionID得到的值是undefined,要怎样才能获得session id呢。还有个问题:1.我用socket.io连接服务器,为什么每次刷新页面,sessionid都会变呢,记得在java中只要不关闭所有页面session id是不会变得啊 2.socket.io中通过client.id获得的session id和express中的session id是一个吗?
啥?session里本来没有东西,id是你自己存进去的,你不存进去肯定就没有
我用req.session.varname=“abc”;为什么提示500 TypeError: Cannot set property ‘varname’ of undefined呢?我看网上的例子都是这么用的,是不是在使用session前要先创建啊?
我知道了,session的app.use()要在app.use(app.router);之前才行
我知道了,session的app.use()要在app.use(app.router);之前才行
session id不是服务器发给客户端的随机数吗?应该在首次向session首次存储数据后自动生成吗,怎么会是自己设定呢?
@sunuxreg 你这个session id指的到底是什么?你是不是以为这个是java中的jsessionid?java中的那个是应用服务器自己生成的,而且这个jsessionid跟你也没多大关系,除非你禁用了javascript,需要它来重写。但是也不必手动操作啊。
我指的session ID就是服务器发给客户端,用来区分不同页面连接的一串随机数啊。 是这样的,我在用socket.io实现一个聊天室。在两个人聊天的情况下(类似于人人网的悄悄话),应该通过sessionid将详细推送到指定的客户端。但是我发现,每次客户端在刷新之后sessionid都会变化。这样在用户刷新页面后就再收不到信息了。 我就是想看看express中的sessionid和socketio里的sessionid是不是同一个。
@sunuxreg 哦,聊天室啊。这个我做过,你这个方案不行。可以这样:
- 在服务端保存一个userList={},key是用户的id,这个id可以以cookie的形式加密后种到用户浏览器,value是该用户每个浏览器tab页的socketio对象(即io.sockets.on(‘connection’, function(client))中的client)。
- 点对点发送时,传入目的user的id,然后在userList总找出目的用户的所有tab页对应的client对象,然后emit相应信息即可。
哦,那样的话,在onConnection的时候把client对象push到userList{}里是吧,谢谢了。我还没想到要保存client对象。
@sunuxreg 是的
req.sessionID就可以取到
req.sessionID得到的值是undefined
@sunuxreg 你先要登录 并且已经将session 保存了才能获取到!! understand
socket.io 可以直接群发,也可以创建聊天室,往特定聊天室群发。官网有例子,不必自己维护一个 userList