Как добавить файлы cookie в ответы Seaside без перенаправления?

StackOverflow https://stackoverflow.com/questions/88306

Вопрос

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

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top