在浏览器发出两个新的后续请求之前,响应中设置的Cookie不会显示在后续的服务器请求中

时间:2014-03-06 21:48:45

标签: java servlets cookies

向服务器发出初始请求,并在响应中添加cookie:

response.addCookie(studyPrefsCookie);

在网页上,在开发人员工具中,我可以看到刚设置的cookie。大。这是一张照片:

enter image description here

我的假设是,现在已经设置了cookie,对我的Web应用程序的每个后续请求(相同的域,相同的servletcontext等)现在将在请求对象可用的cookie中包含此cookie值。但是,似乎在下一个请求中,cookie值不存在,即使通过检查开发人员工具中的请求显示cookie值已发送。在第二个后续请求中,它会正常显示。以下是请求的外观,每次都与浏览器相同:

enter image description here

我甚至从头开始再次测试了这个,然后在第一页加载后再回到服务器进行ajax调用。就浏览器而言,首先ajax调用具有所有正确的cookie,但httpservletrequest对象的cookie没有它。进行另一个相同的ajax调用,现在服务器找到了cookie值。这是预期的行为吗?

我正在服务器端以相同的方式读取cookie,并使用一些辅助方法:

Cookie[] cookies = studyCookieService.getCookiesByName(request.getCookies(), "STUDYPREFS");
if(cookies.length > 0 && studyCookieService.doesCookieContainValue(cookies[0], studyCookieService.getConsentNotCompletedCookieValueWithoutStudyId())){
        //redirect
        return "redirect:/" + STUDY_CONTROLLER_REQUEST_PATH;

- 服务方法

public Cookie[] getCookiesByName(Cookie[] cookies, String cookieName){
    List<Cookie> matchingCookies = new ArrayList<Cookie>();

    if (cookies != null) {
      for (Cookie ck : cookies) {
        if (cookieName.equals(ck.getName())) {
          matchingCookies.add(ck);
        }
      }
    }

    return matchingCookies.toArray(new Cookie[matchingCookies.size()]); 
}

0 个答案:

没有答案