如何验证用户的身份

yu123456

websocket服务器跟业务服务器分开部署 不需要登录就能聊天 如何防止伪造身份
我的思路如下 但是不知道对不对 大家帮忙看看
当用户第一次访问业务服务器的时候 根据session随机生成一个用户名 然后生成一个token 将用户名跟token的关系保存到数据库
然后把用户名以及token发给用户的浏览器 然后浏览器带上用户名以及token 访问websocket服务器的登录接口
websocket服务器根据用户名去数据库查找token 如果跟传过来token的一致 就允许登录然后把用户信息保存到websocket服务器的session里面 这样用户以后每次发消息的时候直接读取websocket里面的用户名 就知道这个消息是谁发过来的

4621 4 0
4个回答

yu123456

最后一句补充下 这样用户以后每次发消息的时候直接读取websocket服务器的session里的用户名 就知道这个消息是谁发过来的

  • 暂无评论
yu123456

补充说明 经过我验证GatewayWorker不支持session 那么只能在登录的时候绑定clientid跟用户名的关系
下次发消息的时候根据clientid来查找出用户名 由此来得的是谁发的消息

  • 暂无评论
yu123456

在次补充 上面说的有问题 希望对相关人员有帮助 测试发现GatewayWorker 支持session 的 但是跟传统的session不一样 例如下面的例子

if(empty($_SESSION)){
   $_SESSION=123;
   file_put_contents('/home/wwwroot/default/test.txt',123,FILE_APPEND);
}

每次刷新浏览器后都会重新生成 (传统浏览器session刷新是不会重新生成的) 但是不刷新的这段时间内 里面的值是一直存在的 所以可以通过他来判断用户是否登录过 这个session说白了就是一个所有用户都能访问的全局数组

  • 暂无评论
xiuwang

是的,GatewayWorker支持SESSION,不过是自己的一套机制,GatewayWorker手册有详细介绍。

如何验证身份,我的做法是web(我用的是tp)登录的时候,向redis存一个数据,可以就是session_id,value是用户信息。
浏览器连接上GatewayWorker后发送login请求(请求里包含session_id),GatewayWorker(Events.php的onMessage)收到login请求,提取session_id去redis查用户是谁,然后利用Gateway::bind($client_id, $uid);接口绑定,设置下session,$_SESSION=xxx。

  • 暂无评论
年代过于久远,无法发表回答
🔝