我正在 Seaside 中制作一个小型 Web 应用程序。我有一个登录组件,在用户登录后,我想在下一个组件呈现自身时发送一个 cookie。有没有办法获取处理响应的对象,以便我可以在它将输出的标头中添加一些内容?
我试图避免使用 WASession>>redirectWithCookies 因为重定向似乎很笨拙,因为我想设置一个 cookie。
是否已经存在另一种方法来添加将在下一个响应时发出的 cookie?
我正在 Seaside 中制作一个小型 Web 应用程序。我有一个登录组件,在用户登录后,我想在下一个组件呈现自身时发送一个 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 流程那里 :)