Pergunta

Estou fazendo um pequeno aplicativo na Web em Seaside. Eu tenho um componente de login e, depois que o usuário faz login, quero enviar um cookie quando o próximo componente se renderiza. Existe uma maneira de obter o objeto que lida com a resposta para que eu possa adicionar algo aos cabeçalhos que ele será lançado?

Estou tentando evitar o uso de wasession >> RedirectWithCookies, pois parece que o Kludgey é redirecionado apenas porque quero definir um cookie.

Existe outra maneira que já existe para adicionar um cookie que sairá na próxima resposta?

Foi útil?

Solução

Atualmente, não existe uma maneira interna de adicionar cookies durante a fase de ação/retorno de chamada do processamento de solicitação. É provavelmente um defeito e é observado nesta questão: http://code.google.com/p/seaside/issues/detail?id=48

Atualmente, isso está previsto para ser corrigido para o Seaside 2.9, mas não sei se será o backport para 2,8 ou não.

Lembre-se de que já existe (por padrão) um redirecionamento entre a ação e a renderização das fases para impedir que uma atualização seja acionando os retornos de chamada, portanto, no grande esquema das coisas, mais um redirecionamento neste caso não é assim mau.

Se você ainda quiser se aprofundar, dê uma olhada no WarenderContinuation >> HandleRequest:. É aí que o processamento de retorno de chamada é acionado e a fase de redirecionamento ou renderização foi iniciada.

Editado para adicionar:

O problema já foi corrigido e (no código de desenvolvimento mais recente), agora você pode adicionar cookies corretamente à resposta atual a qualquer momento. Basta acessar o objeto de resposta no contexto de solicitação atual e adicionar o cookie. Por exemplo, você pode fazer algo como:

self requestContext response addCookie: aCookie

É improvável que isso seja retratado para o Seaside 2.8, pois exigiu uma mudança bastante importante na maneira como as respostas são tratadas.

Outras dicas

Acabei de analisar isso em profundidade, e a resposta parece ser não. Especificamente, não há como obter a resposta do WarenderCanvas ou qualquer coisa que ele possa acessar (ele se mantém no WarenderingContext, que se mantém no wahtmlstreamdocument, que se apega à resposta da resposta fluxo mas não a resposta em si). Eu acho que seria razoável dar o acesso ao contexto à resposta atual, precisamente ser capaz de definir cabeçalhos, mas você perguntou se já havia uma maneira, então: não.

Dito isto, o Seaside faz muito redirecionamento extra, e parece não ter muito impacto na experiência do usuário, então talvez a coisa a fazer seja parar de se preocupar com isso parecendo kludgey e seguir o fluxo da API que já está lá :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top