在棘轮websocket连接内开始一个会话

时间:2013-04-24 05:19:14

标签: symfony session-cookies ratchet

我们已经构建了一个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才能在8080上发送websocket升级请求之前获取cookie,因此它可以发送带有升级请求的cookie。我希望得到像我上面尝试的那样工作,所以客户端不必打扰端口80上的Web应用程序。

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

我相信默认情况下创建一个新的Symfony Session类将使用全局变量。 Ratchet提供Session middleware class,它将Symfony Session对象附加到每个ConnectionInterface。

相关问题