有一个系统,用户可以登录然后进行聊天。 当用户通过身份验证时,auth-identificationicator将保存到会话并将会话保存到Redis。 在后端(PHP)用户状态(已验证或否)基于会话值(auth-identificationicator)。
此外,系统还具有基于nodejs和sockets.io的聊天功能。 有2种用户类型Admin和User,他们可以互相聊天。 当用户/管理员连接到聊天室或在其中写入消息时,nodejs获取标头,并且在其中有cookie,nodejs从那些中获取SESSION_ID并检查该会话是否在Redis中呈现并且具有auth-identificationicator,如果它是 - 我们知道用户已经过身份验证,可以连接到房间,或者我们可以将他的消息保存到数据库中。然后收到的消息被广播给连接到房间的用户。
问题是: 1 - 打开浏览器,由管理员在系统中进行身份验证并打开聊天 2 - 为用户执行相同操作 然后这些可以相互沟通。
但是当用户打开第一个带有聊天的浏览器标签时,在第二个标签上他会退出,这次管理员会写消息,已登出的用户将继续收到消息。
所以,问题是:我们如何关闭与用户的套接字连接? 如果用户点击Logout按钮,那么我们可以通过Redis发布/订阅渠道从PHP发送到nodejs消息,nodejs将关闭连接,它没问题。
但是当用户打开第二个浏览器选项卡然后清理浏览器cookie时,他将立即获得未经身份验证,但在第一个选项卡上,他会继续收到消息。管理员也是如此。 我们怎样才能阻止它?
感谢。