读书人

nodejs socket.io 组合php 通过 redis

发布时间: 2013-11-16 23:15:33 作者: rapoo

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中这么调用

读书人网 >JavaScript

热点推荐