【问题标题】:Starting a session within a ratchet websocket connection在棘轮 websocket 连接中启动会话
【发布时间】:2013-04-17 12:39:45
【问题描述】:

我们已经构建了一个 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 上的 Web 应用程序。

我错过了什么吗?

【问题讨论】:

    标签: symfony session-cookies ratchet


    【解决方案1】:

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

    【讨论】:

    • 没错。但是有没有办法让 Ratchet 向客户端发送一个 set-cookie 标头?
    • 我认为 Ratchet 不需要做一个 set-cookie。您的网站已经创建了 Ratchet 将读取以填充会话数据的会话 cookie。话虽如此,我认为浏览器安全问题会阻止它工作;不同的端口被视为单独的域,因此您将无法将 cookie 传回和第四个。
    • 我不需要与网络应用共享 cookie。我很乐意让 Ratchet 设置它自己的 cookie。
    猜你喜欢
    • 2013-06-03
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多