を接続するとき、私は別のホスト上のAPIサーバーへのWebSocket接続送ります:私のフロントエンドがlocalhost:8080
でホストされているのに対しない永続セッション別のホスト上のAPIに
new WebSocket("ws://localhost:3000")
を。
session
(Sinatraのenable :sessions
)でキーを設定できますが、htmlページを更新するたびにデータが失われます。
フロントエンドがサーバーと同じホストを共有するセッションがいくつか必要ですか。それとも、私はこれを回避できる方法はありますか?ちなみに、フロントエンドはWebpackサーバー(ノード)上で実行されています。
私はまた、APIのルートルートhttp://localhost:3000
ためcross_origin手当を追加し、クライアント(CoffeeScriptのこの例)でこれをやってみました:
$.get "http://localhost:3000", ->
new Websocket("ws://localhost:3000")
私の思考は多分セッションは、「初期化するために必要なことでした"ws://
の代わりにhttp://
を超えていましたが、どちらも機能しませんでした。セッションは$.get "http://localhost:3000"
リクエストでも機能しませんでした。ページを更新すると、毎回セッションがクリアされることが示されます。
セッションはクッキーに基づいているため、おそらくセッションクッキーの永続性が問題です。 Webページと異なるホスト/ポートを使用すると、セッションCookieはサードパーティのCookieとなり、サードパーティのCookieには異なるセキュリティルールと設定が適用されます。あなたの設定やアドオンがサードパーティのCookieの永続性をブロックしていると思います。プレーンなwebSocket自体はクロスオリジン接続でうまく動作しますが、確立されたときにセッションクッキーをアタッチしようとすると、クッキーの永続性が必要になります。 – jfriend00
クライアントまたはサーバーにコードを追加しますか? –
まず、サードパーティのCookieがクライアントによって保持されているかどうかを調べる必要があります。そうでない場合は、クライアントの設定を修正して保持するか、別の起点を使用しないようにして、サードパーティのCookie設定に影響を与えないようにする必要があります。 – jfriend00