如何在不重定向的情况下向Seaside响应中添加Cookie?

时间:2008-09-17 22:23:22

标签: http cookies seaside redirectwithcookies

我正在Seaside制作一个小型网络应用程序。我有一个登录组件,在用户登录后我想在下一个组件呈现自己时发送cookie。有没有办法获得处理响应的对象,所以我可以添加一些它将输出的标题?

我正在努力避免使用WASession>> redirectWithCookies,因为重定向只是因为我想要设置一个cookie,这似乎很麻烦。

是否还有另一种方法可以添加一个将在下一个响应中发布的cookie?

2 个答案:

答案 0 :(得分:5)

目前,在请求处理的操作/回调阶段,没有内置的方法来添加Cookie。这很可能是一个缺陷,并在本期中提到:http://code.google.com/p/seaside/issues/detail?id=48

目前预计海边2.9将会修复,但我不知道它是否会被反向移植到2.8。

请记住,默认情况下,操作和呈现阶段之间已经存在重定向,以防止刷新重新触发回调,因此在宏观方案中,在这种情况下,还有一个重定向不是所以坏。

如果您还想进一步深入挖掘,请查看WARenderContinuation>> handleRequest:。这就是触发回调处理并开始重定向或渲染阶段的地方。

已编辑添加:

现在已修复该问题,并且(在最新的开发代码中)您现在可以随时正确地将Cookie添加到当前响应中。只需访问当前请求上下文中的响应对象并添加cookie即可。例如,您可能会执行以下操作:

self requestContext response addCookie: aCookie

这不太可能被移植到Seaside 2.8,因为它需要在处理响应的方式上发生相当大的转变。

答案 1 :(得分:4)

我刚刚深入研究了这个问题,答案似乎是否定的。具体来说,没有办法获得来自WARenderCanvas的响应或它可以访问的任何东西(它保存在WARenderingContext上,它保存在WAHtmlStreamDocument上,它保存在响应的而不是响应本身) 。我认为给上下文访问当前响应是合理的,正是为了能够在其上设置标题,但你问是否已经有了一种方法,所以:不。

也就是说,Seaside做了很多额外的重定向,但它似乎并没有对用户体验产生太大影响,所以可能要做的就是不再担心它看似kludgey并顺其自由流动已经存在的API:)

相关问题