我们构建了一个 Ratchet websocket 服务器,为独立的客户端应用程序提供服务。服务器在端口 8080 上运行,而我们的 Symfony 应用程序在端口 80 上运行。至关重要的是,我们必须在 websocket 服务器中运行会话,以便我们可以唯一地标识每个客户端。
问题是 Ratchet 不通过端口 8080 发送 set-cookie 标头。
希望找到一种方法来发送 set-cookie 标头以响应 8080 上的升级请求,我尝试在 onOpen() 中启动一个新会话:
use Symfony\Component\HttpFoundation\Session\Session;
class ClientApi implements MessageComponentInterface {
/**
* @inheritDoc
*/
public function onOpen(ConnectionInterface $conn) {
$conn->Session = new Session();
$conn->Session->start();
}
...
但这并没有导致在升级请求的响应中发回 set-cookie 标头。
我们有一个解决方法,客户端必须首先在端口 80 上执行 GET 来获取 cookie,然后再通过 8080 发送 websocket 升级请求,这样它就可以随升级请求一起发送 cookie。我希望能像我上面尝试的那样工作,这样客户端就不必打扰端口 80 上的网络应用程序。
我错过了什么吗?
我相信默认情况下创建一个新的 Symfony Session 类将使用全局变量。棘轮提供了一个会话中间件类它将把一个 Symfony Session 对象附加到每个 ConnectionInterface。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)