【问题标题】:IE & Chrome not storing cookies from RESTEasyIE 和 Chrome 不存储来自 RESTEasy 的 cookie
【发布时间】:2014-10-24 02:10:55
【问题描述】:

问题

我在使用 REST 应用程序 (RESTEasy) 时遇到了问题。在我的应用程序中,我正在设置一个 cookie。当我使用 Firefox 开发和测试它时,我没有遇到任何问题。 cookie 将按预期设置并返回。但是,当我在 Internet Explorer 中尝试时,cookie 不会被设置。我在 Chrome 中确认了相同的行为。

我使用 Fiddler 验证了无论是什么浏览器发出请求,cookie 都会被发回。但是,尽管浏览器收到了 cookie,但 IE 和 Chrome 不仅没有发回 cookie,而且我在浏览器的 cookie 存储中也找不到 cookie 的踪迹。

我的尝试

这是今天上班的时候,我花了很长时间关闭 IE 中的所有安全设置。我不认为是这样。回到家后,我编写了一个简化版本,以尽可能多地排除代码复杂性。我还在 Safari 中对其进行了测试,并在 Chrome 和 IE 上再次对其进行了测试。因此,现在已经在 Windows 和 Mac 上进行了测试。没有运气。

我也尝试过修改 cookie 的设置。我最初设置了 HttpOnly,所以我取消了它。我最初有一个会话 cookie,所以我将其有效期更改为 1 天。我试图愚弄路径和域。没有运气。

应用程序更复杂,但在简化方面我排除了跨站点问题、Ajax 问题等。我还尝试过使用不同的域:localhost、Intranet 和完全限定域。不知道怎么回事!

这里是返回的 cookie 标头的示例。 (这来自 curl 和我的精简版应用程序。)在这个版本中,cookie 设置为 1 天后过期。但是,就像我说的,我也尝试过使用会话 cookie。

Set-Cookie: ExampleCookie=abcdefg0123456; Version=1; Comment="Just a sample cookie."; Domain=localhost; Max-Age=86400; Expires=Sun, 31-Aug-2014 03:33:44 GMT; Path=/

示例代码(已测试)

下面是我失败的代码的精简版本。我已经测试了下面的代码,我无法理解为什么 Chrome 和 Internet Explorer 不会设置 cookie,但 Firefox 和 Safari 会。是否有人对这些浏览器和 cookie 或 RESTEasy 和 cookie 有问题?

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.NewCookie;
import javax.ws.rs.core.Response;

// Omitted: The base path, set elsewhere, is /CookieExample/rest

@Path("/")
public class CookieExampleService {

    @GET
    @Path("/")
    @Produces("text/html")
    public Response sayHello() {
        return Response.ok().entity("<p>Hello, Cookies!</p>").build();
    }

    @GET
    @Path("/cookiejar")
    @Produces("text/html")
    public Response serveCookie() {
        NewCookie cookie = new NewCookie("ExampleCookie", 
                                         "abcdefg0123456", 
                                         "/", 
                                         "localhost", 
                                         "Just a sample cookie.", 
                                         NewCookie.DEFAULT_MAX_AGE, 
                                         false);

        // http://localhost:8080/CookieExample/rest/cookiejar
        return Response.ok().cookie(cookie).entity("<p>Have a cookie!</p>").build();
    }
}

任何见解将不胜感激。这真的让我很难过。谢谢!

【问题讨论】:

    标签: java internet-explorer google-chrome cookies resteasy


    【解决方案1】:

    这里的问题不是浏览器而是您设置的域。就像discussed here 一样,RFC 2109 期望域中有两个点。看来 Firefox 在这里没有 Chrome 和 IE 严格。

    如果您将域设置为null 或空字符串,它将起作用。

    【讨论】:

    • 谢谢。我搜索和搜索,但我想我没有得到正确的搜索词。在我写完并发布以上内容后,我在侧边栏中看到了类似的帖子。 (当我创建标题时,我什至没有看到这些 - 只有当我发布我的问题时。)当我遇到一些引用问题引用的答案时,我正躺在床上用我的 iPad 阅读它们。我有点尴尬,在发布问题之前我自己没有找到这个。 (昨天我在工作中度过了一段糟糕的时光。)无论如何,再次感谢你。我今天早上起床第一件事,看到了你的回复,并进行了测试。它有效。
    • 我不确定我是否应该回答或添加“可能重复”的评论,但我确信会有其他人不会立即看到这个问题的原因。
    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 2016-07-20
    • 2015-04-28
    • 2011-04-09
    • 2015-07-05
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多