リダイレクトせずに Seaside 応答に Cookie を追加するにはどうすればよいですか?
-
01-07-2019 - |
質問
Seaside で小さな Web アプリケーションを作成しています。ログインコンポーネントがあり、ユーザーがログインした後、次のコンポーネントがそれ自体をレンダリングするときにCookieを送信したいと考えています。出力されるヘッダーに何かを追加できるように、応答を処理するオブジェクトを取得する方法はありますか?
Cookie を設定したいという理由だけでリダイレクトするのはかなり面倒に見えるため、WASession>>redirectWithCookies の使用を避けようとしています。
次の応答で送信される Cookie を追加する別の方法が既に存在しますか?
解決
現在、リクエスト処理のアクション/コールバックフェーズ中に Cookie を追加する組み込みの方法はありません。これはおそらく欠陥であり、この問題で次のように指摘されています。 http://code.google.com/p/seaside/issues/detail?id=48
この問題は現在 Seaside 2.9 で修正される予定ですが、2.8 にバックポートされるかどうかはわかりません。
アクションとレンダリングのフェーズの間には、更新によるコールバックの再トリガーを防ぐためのリダイレクトが (デフォルトで) すでに存在していることに注意してください。そのため、大まかに言えば、この場合、もう 1 つのリダイレクトは必要ありません。 それで 悪い。
さらに詳しく知りたい場合は、WARenderContinuation>>handleRequest: を参照してください。ここでコールバック処理がトリガーされ、リダイレクトまたはレンダリングのフェーズが始まります。
編集して以下を追加しました:
この問題は現在修正されており、(最新の開発コードでは) いつでも現在の応答に Cookie を適切に追加できるようになりました。現在の要求コンテキストで応答オブジェクトにアクセスし、Cookie を追加するだけです。たとえば、次のようなことを行うことができます。
self requestContext response addCookie: aCookie
これは、応答の処理方法にかなり大きな変更を必要としたため、Seaside 2.8 にバックポートされる可能性は低いです。
他のヒント
これについて詳しく調べてみましたが、答えはノーのようです。具体的には、WARenderCanvas または WARenderCanvas がアクセスできるものからの応答を取得する方法はありません (WARenderingContext を保持し、WARenderingContext が WAHtmlStreamDocument を保持し、WAHtmlStreamDocument が応答を保持します)。 ストリーム ただし、応答自体ではありません)。現在の応答にヘッダーを設定できるようにするために、コンテキストに現在の応答へのアクセスを与えるのが合理的だと思いますが、すでにその方法があるかどうかを尋ねたので、次のようにします。いいえ。
そうは言っても、Seaside は多くの追加のリダイレクトを実行しており、ユーザー エクスペリエンスに大きな影響を与えていないようです。そのため、やるべきことは、それが面倒に見えることを心配するのをやめて、すでに提供されている API の流れに従うことかもしれません。そこには :)