我目前在我的php项目中使用Websockets [Ratchet,Symfony]。当用户登录时,他会自动连接到websocket连接中的通道。我能够将消息推送到频道并在客户端接收+显示它们。因此,在登录后连接到websocket时管理对websocket的访问是没有问题的。假设我们有以下情况,我在身份验证方面遇到了问题:
我检查过用户在使用websockets而不是ajax时仍然登录websocket方面的symfony会话。当我使用ajax demo -request检查相同时,用户不再登录。这是主要问题,websocket会话与symfony会话不能很好地同步,因为在symfony会话中,用户已注销,但在Websocket上,他仍然登录。
最初,我尝试了以下操作以避免上述情况:
一般来说,我认为这种方法很好(?),但我看到的问题是非同步会话。如何同步它或强制websocket通道检查cookie /推送到达时再次发送?你是如何处理这种情况的?
答案 0 :(得分:1)
我是如何个人解决这个问题的。 我在数据库中打开时保存了每个connectionId。
然后我检查了哪些连接应该接收哪个通道,并且仅向应该接收它的人发送消息。
之后一旦出现问题:用户退出,然后我通过打开的连接从数据库中删除用户,并且不再向这些用户发送每条新消息。
编辑: 要解决此处提出的问题:用户刷新他/她的缓存/ cookie,但连接仍然打开,如何确保连接仍然安全?
答案:如果用户刷新他/她的缓存,则套接字连接会保持不变,尽管用户会在刷新/重定向后关闭它。这里的安全问题是不存在的,因为用户在会话开始时以正确的方式连接,然后清除了它们的缓存,以便它们被注销。
如果用户有不良意图,那么首先应该从未建立连接。