Php 如何与节点共享Laravel会话?

Php 如何与节点共享Laravel会话?,php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,我正在设置一个socket.io服务器来处理套接字请求。这在端口1234上运行。这是在laravel 5.1应用程序的旁边运行的。Laravel正在使用redis处理会话 我有很多关于将laravel与socket.io连接起来的教程,都非常简单。我可以连接、响应并将消息转发回套接字和laravel应用程序 但是,每个教程都避免了此设置中的身份验证部分。一旦在socket:1234空间中接收到消息,我如何将该消息转发到laravel,同时确保请求得到验证 理想情况下,我只需共享会话,并验证XSR

我正在设置一个socket.io服务器来处理套接字请求。这在端口1234上运行。这是在laravel 5.1应用程序的旁边运行的。Laravel正在使用redis处理会话

我有很多关于将laravel与socket.io连接起来的教程,都非常简单。我可以连接、响应并将消息转发回套接字和laravel应用程序

但是,每个教程都避免了此设置中的身份验证部分。一旦在socket:1234空间中接收到消息,我如何将该消息转发到laravel,同时确保请求得到验证

理想情况下,我只需共享会话,并验证XSRF令牌。因为这两个应用程序在不同的端口上,所以我无法直接获取会话

目前我正在使用另一种方法,它涉及以下内容:

  • 在套接字连接时(在节点中),我使用节点的加密库和节点的PHPUnserialise库对连接上发送的cookie进行解密
  • 这将为我提供laravel会话id(来自cookie)
  • 我使用它访问redis laravel会话
  • 然后,我解密该会话,从而使我能够访问用户id

它可以工作,但我觉得它可能是一个潜在的安全漏洞,因为我实际上没有使用_令牌来验证源代码

我认为你的代码是正确的,而且可能是唯一的方法。 会话id通常存储在cookie中,并且在某些时候必须发送到服务器。由于node和php是不同的语言,它们不能直接共享会话。您总是需要一个中间存储,如redis、mysql或文件系统。当然还有一种检索会话的方法。检索会话的关键当然是会话id

关于保护WebSocket的有趣帖子:

他建议在会话中添加一个随机生成的密钥,以便在建立websocket连接时进行验证

会话id本身已经是随机的,但是这些会话id通常是长寿命的,因此短寿命的随机id可以提高安全性。短命应该尽可能短:让php将其添加到数据库中,一旦在节点中验证了连接,就将其从数据库中删除,这样您就不能再次使用它了

还有许多额外的会话验证技术,如检查浏览器字符串,或将会话固定到一个ip地址:

我不推荐这些类型的检查,因为它们实际上并没有增加太多额外的安全性,只会让最终用户感到烦恼

我认为最重要的是:

  • 您使用一种安全的方式来通信会话id等。这意味着HTTPS
  • 会话应在用户关闭浏览器时过期
  • 如果用户从其他位置连接,或者应该有权访问其“登录日志”,则应通知用户

大约一年前,我找到了一个很好的解决方案。我决定把它做成一个模块,它真的很容易使用。帮助您获取cookie而无需硬编码。帮助您获取会话Id并从mysql和redis中检索它


您是否尝试使用第三方软件解决此问题?例如,MQ。看起来它适合你所有的需要。