【问题标题】:How can I add cookies to Seaside responses without redirecting?如何在不重定向的情况下将 cookie 添加到 Seaside 响应?
【发布时间】:2010-09-10 10:32:48
【问题描述】:

我正在 Seaside 中制作一个小型 Web 应用程序。我有一个登录组件,在用户登录后,我想在下一个组件呈现自身时发送一个 cookie。有没有办法获取处理响应的对象,以便我可以在它将输出的标头中添加一些内容?

我试图避免使用 WASession>>redirectWithCookies,因为仅因为我想设置 cookie 而重定向似乎很麻烦。

是否已经存在另一种方法来添加将在下一个响应时发出的 cookie?

【问题讨论】:

    标签: http cookies seaside redirectwithcookies


    【解决方案1】:

    目前没有在请求处理的操作/回调阶段添加 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,因为它需要对响应的处理方式进行相当大的转变。

    【讨论】:

    • 我并不像代码中的控制流那样担心重定向。谢谢,:)
    【解决方案2】:

    我刚刚对此进行了深入研究,答案似乎是否定的。具体来说,没有办法从 WARenderCanvas 或它可以访问的任何东西中获取响应(它保存在 WARenderingContext 上,它保存在 WAHtmlStreamDocument 上,它保存在响应的 stream 上,但不是响应本身) .我认为让上下文访问当前响应是合理的,正是为了能够在其上设置标题,但您问是否已经有办法,所以:没有。

    也就是说,Seaside 做了很多额外的重定向,它似乎对用户体验没有太大影响,所以也许要做的就是停止担心它看起来很笨拙,顺其自然已经存在的 API :)

    【讨论】:

    • 我试图弄清楚一个组件如何处理请求然后呈现另一个组件。必须先重定向然后渲染另一个组件,这在代码设计中增加了一个额外的步骤。哦,好吧,我还在学习。谢谢,:)
    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2023-03-13
    • 2017-01-12
    • 2017-01-24
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多