Как добавить файлы cookie в ответы Seaside без перенаправления?
-
01-07-2019 - |
Вопрос
Я делаю небольшое веб-приложение в Сисайде.У меня есть компонент входа в систему, и после того, как пользователь входит в систему, я хочу отправить файл 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, который уже используется. там :)