【问题标题】:How to send a cookie after response.sendRedirect()?如何在 response.sendRedirect() 之后发送 cookie?
【发布时间】:2012-08-06 01:22:57
【问题描述】:

我正在将用户重定向到某个 URL,我想用它发送一个 cookie:

        Cookie cookie = new Cookie("CADASTROADM", "someValue");
        cookie.setPath("/");
        cookie.setMaxAge(129600); //With it or without, makes no difference.
        URL urlToRedirect = new URL(pageToRedirect);
        cookie.setDomain(urlToRedirect.getHost());//With it or without, makes no difference.
        response.addCookie(cookie);
        response.sendRedirect(pageToRedirect);

但是,当他被重定向到页面时,cookie 不存在。我无法使用 requestDispatcher.forward(),因为我将用户重定向到绝对页面。

有可能吗?我究竟做错了什么?

【问题讨论】:

    标签: java servlets redirect cookies


    【解决方案1】:

    只能为发送请求的同一域或子域设置/检索 Cookie。否则这是一个巨大的安全漏洞。

    因此,如果您要重定向到其他域,则该 cookie 将在那里不可用。如果您明确地将 cookie 域设置为该不同的域,那么它将被完全忽略。如果您没有明确设置 cookie 域(因此它默认为与请求发送到的域相同的域),那么它将仅适用于当前域,而不适用于重定向的域。

    您需要根据具体的功能要求寻找替代方法。很难提出一个建议,因为您根本没有说明问题中的具体功能要求。也许您应该只发送一些特定的请求参数?

    【讨论】:

    • 非常感谢。这正是我面临的问题。为了解决这个问题,我不得不使用 cookie.setDomain(".commondomain.com"); (公共域是我的应用程序和我尝试发送的应用程序相同的 URL 部分。
    • @user1582142 我也面临像你这样的问题,但我的客户端在 8100 中运行而服务器在 8080 中运行服务器具有弹簧安全性,因为 defaultSuccessUrl 重定向到其他一些 @987654322 @ 在那个 url 中没有 set-cookie @BalusC
    • @user1582142 如何在 java 端执行此操作,因为重定向发生在 java 到 java 我使用 angularjs 它没有进入前端,当 spring 安全重定向 url 时是否可以 set-cookie,@ BalusC
    • @user1582142 那么,在明确设置域之后,在 sendRedirect 调用之后 cookie 是否被保留?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多