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

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

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

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

2 ответа

Решение

В настоящее время не существует встроенного способа добавления файлов 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, поскольку это потребовало довольно значительного изменения в способах обработки ответов.

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

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

Другие вопросы по тегам