Как я могу добавить куки в Приморские ответы без перенаправления? - PullRequest
5 голосов
/ 18 сентября 2008

Я делаю небольшое веб-приложение в Приморском. У меня есть компонент входа в систему, и после того, как пользователь войдет в систему, я хочу отправить файл cookie, когда следующий компонент будет отображаться сам. Есть ли способ получить объект, обрабатывающий ответ, чтобы я мог добавить что-то к заголовкам, которые он выведет?

Я стараюсь избегать использования WASession >> redirectWithCookies, поскольку перенаправление кажется довольно хитрым только потому, что я хочу установить cookie.

Есть ли еще какой-нибудь способ добавить cookie, который будет добавлен при следующем ответе?

Ответы [ 2 ]

5 голосов
/ 18 сентября 2008

В настоящее время нет встроенного способа добавления файлов cookie на этапе действия / обратного вызова обработки запроса. Это, скорее всего, дефект, и он отмечен в этом выпуске: http://code.google.com/p/seaside/issues/detail?id=48

Это в настоящее время планируется исправить для Seaside 2.9, но я не знаю, будет ли он даже перенесен на 2.8 или нет.

Имейте в виду, что уже (по умолчанию) существует перенаправление между фазами действия и рендеринга для предотвращения повторного запуска обратных вызовов при обновлении, поэтому в общей схеме еще одно перенаправление в этом случае так плохо.

Если вы все еще хотите копать дальше, взгляните на WARenderContinuation >> handleRequest :. Именно здесь запускается обработка обратного вызова и начинается фаза перенаправления или рендеринга.

Отредактировано, чтобы добавить:

Теперь проблема исправлена, и (в последнем коде разработки) вы теперь можете в любой момент правильно добавить файлы cookie в текущий ответ. Просто получите доступ к объекту ответа в текущем контексте запроса и добавьте cookie. Например, вы можете сделать что-то вроде:

self requestContext response addCookie: aCookie

Маловероятно, что это будет перенесено в Seaside 2.8, поскольку это потребовало довольно значительных изменений в способах обработки ответов.

4 голосов
/ 18 сентября 2008

Я только что углубился в это, и ответ, кажется, нет. В частности, нет никакого способа получить ответ от WARenderCanvas или чего-либо, к чему он может получить доступ (он относится к WARenderingContext, который содержит WAHtmlStreamDocument, который содержит stream ответа, но не сам ответ). Я думаю, что было бы разумно предоставить контексту доступ к текущему ответу, именно для того, чтобы иметь возможность устанавливать заголовки для него, но вы спросили, был ли уже путь, поэтому: нет.

Тем не менее, Seaside делает много дополнительных перенаправлений, и это, похоже, не оказывает большого влияния на взаимодействие с пользователем, поэтому, возможно, нужно перестать беспокоиться о том, что он выглядит неуважительным, и продолжить работу API, который уже есть:)

...