当前位置: 代码迷 >> JavaScript >> nodejs socket.io 组合php 通过 redis来配置登录验证
  详细解决方案

nodejs socket.io 组合php 通过 redis来配置登录验证

热度:1006   发布时间:2013-11-16 23:15:33.0
nodejs socket.io 结合php 通过 redis来配置登录验证
io.set('authorization', function (handshakeData, accept) {

    if (handshakeData.headers.cookie) {

        handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
        if(handshakeData.cookie && handshakeData.cookie['PHPSESSID']){
            
            var sessionClient = redis.createClient();
            var sessionData; 
            sessionClient.get("PHPREDIS_SESSION:"+handshakeData.cookie['PHPSESSID'],function(err,reply){
                console.log("reply:",reply);
                sessionData = reply;
                    //sessionid|i:100;uid|i:100;username|s:4:\"from\";"
                    console.log(sessionData,handshakeData.cookie['PHPSESSID']);
                    if(!sessionData){
                        return accept('not login',false);
                    }
                    console.log(sessionData);
                    var dd = sessionData.split(";");
                    var uid ; 
                    for(var i = 0 ; i < dd.length ; i++){
                        var d = dd[i];
                        var key = d.split("|")[0];
                        if(key == 'uid'){
                        var ser = d.split("|")[1].split(":");
                            uid = ser.length == 2 ? d.split("|")[1].split(":")[1] : ser[2].replace(/[\"\\]/g,"");
                            break;
                        }
                    }
                    console.log("uid",uid);
                    if(uid){
                        handshakeData.uid = uid;
                        return accept(null,true);
                    }else{
                        return accept('userid is empty',false);
                    }
            });
        }else{
            console.log(handshakeData.cookie)
            return accept(null, false);
        }
    }else{
        return accept(null,false);
    }
});

? ?最后返回accept函数

? ?如果返回accept(null,true)才会进行下面的各种连接

? ?如果返回false,就不会进行socket连接了

? ?然后可以在验证的加入一些参数,然后在socket中调用

? ?socket.handshake.uid

? ?类似上面设置的uid,在socket中这么调用

  相关解决方案