server.php服务端如何判断session,cookie等

showker

使用phpsocket.io。example里的server.php启动
前台用户登录后,发送消息,我在server.php里判断用户是否登录怎么处理
服务端似乎取不到cookie,session这些值,光凭页面端发送过去的username是不可靠的吧?
应该怎么处理

3389 1 0
1个回答

walkor

phpsocket.io 不支持 cookie,session,cookie和session是给无状态http用的。因为http无法跟踪用户,所以加了cookie和session机制,也就是每次http请求都要带上cookie,服务端通过cookie能得到session,就知道客户端请求属于哪个用户了。

phpsocket.io是长连接的,长连接中用不到cookie和session机制。只要把链接相关的数据存储到连接对象里面就行了,当这个连接发来数据后,可以根据连接对象存储的属性数据判断连接属于哪个用户,也可以根据用户找到连接对象,在服务端主动向客户端发送数据。

用户信息直接通过客户端emit方法发送到服务端就可以,服务端可以把用户信息保存在连接对象上。协议上安全性和http是一个级别的,业务安全性业务要自己考虑,和http协议还是socket.io没关系。

下面是一个连接对象($socket)保存自定义属性的方法

$io = new SocketIO(2020);
$io->on('connection', function($socket){
    // 登录
    $socket->on('login', function ($username) use($socket){
        // 给链接对象赋值一个username 属性记录用户名
        // 当然也可以发个账号密码或者token串在数据库验证用户,得到用户信息
        $socket->username = $username;
    });
    // 广播消息
    $socket->on('chat message', function($msg)use($io){
        $io->emit('chat message', $msg);
    });
);
  • 暂无评论
年代过于久远,无法发表回答
🔝