php+socket.io+express+nodejs
发布于 3年前 作者 scorpio 2608 次浏览

php:apache80端口 nodejs:8888端口 通过nodejs的socket.io模块专门处理即时通信接口 我现在是这么处理的,php中的html页面加载socket.js然后 socket = io.connect(‘localhost:8888’); 监听8888端口 因为需要一个私聊功能 所以必须有一个客户端用户验证 但是发现在localhost/demo.php页面运行之后不会生成connect.sid的cookie 但是运行localhost:8888却有 所以我单独设置了个client_id的cookie 虽然能够实现,但是不是很安全

io.set('authorization', function(handshakeData, callback){  
    handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);  
    var client_id = handshakeData.cookie['client_id'];  
    callback(null, true);  
});

如果不加callback(null,true),那么好像验证不通过,然后就不会执行了,所以很无奈… 还有就是这个有没有什么其他好的办法呢? 求指导

11 回复

其实我是希望能够在里面用到session,但是不知道应该怎么用…

你的http server和socket server是分离的,不大好协作,这样可以不: client socket和server socket建立连接后后台生成一个id,然后再回传给client socket,通过这个id来唯一标识每个客户端

@italkboy 嗯,我刚准备这样,http://roguejs.com/2011-08-08/node-js-socket-io-php/这个好像就是这样的…这样好像就能做到唯一 话说那个authorization是干吗的…貌似不加也行

@scorpio 应该就是在连接的时候取得handshakeData的吧,这里面能取到: handshakeData.cookie[‘connect.sid’] 用来标识每个会话

@italkboy 额…但是我在php端运行的时候,根本没有connect.sid这个cookie,而且我模拟get那个localhost:8888页面,好像http头有set这个cookie,但是实际上好像还是没有,神马cookie都木有,情何以堪啊

@scorpio 你要是直接拿node做http server的话就会有了,貌似是node服务端生成的,我试过用express做server就有这个cookie

@italkboy 嗯是的…直接在node server上访问会生成的…悲剧啊…还有就是貌似我的node server写不进去session,也是cookie

@scorpio 又不是node做http server,当然不能操作php的session哇

@italkboy 好像也是…好吧…我还是继续看下再说,服务器端生成唯一id到客户端应该能解决了,谢谢了~

@scorpio 深夜党哟,天气太热,今天寝室通宵不停电,哈~

@italkboy 哈哈,暑假都是 空调+有电+有网+夜猫子 爽!

回到顶部