【问题标题】:How to get the Cookies from listeners?如何从听众那里获取 Cookie?
【发布时间】:2021-06-19 20:28:37
【问题描述】:

我制作了一个应用程序,我想在有新会话时立即获取 cookie。我用会话监听器尝试过,但没有奏效。我用请求监听器尝试了它,但在 cookies 数组中得到了一个空值。 这是来自请求侦听器的代码,每次都让我为空

public void requestInitialized(ServletRequestEvent sre) {
    
    HttpServletRequest req=(HttpServletRequest)sre.getServletRequest();
    if(req.getSession().isNew())
    {
        Cookie c[]=req.getCookies();
        try
        {
            for (Cookie co:c)
            {
                System.out.println(co.getName());
                System.out.println(co.getValue());
            }
        }
        catch(Exception e)
        {
            System.out.println("error: "+ e.getMessage());
        }
    }
}

【问题讨论】:

  • 您能否用您尝试过的代码示例来扩展这个问题?
  • @IllyaKysil 我把它,任何帮助
  • 您能确认一下cookies确实是由客户端发送的吗?如果请求中没有 cookie,则 HttpServletRequest#getCookies() 返回 null - docs.oracle.com/javaee/6/api/javax/servlet/http/…
  • 我打开了浏览器的cookies,它们已经在那里,我尝试了过滤器中的代码,它工作了

标签: java servlets jakarta-ee servlet-listeners


【解决方案1】:

HttpServletRequest.getCookies() 返回请求中提供的 cookie - 如HttpServletRequest's javadoc 中所述。

当 servlet 容器创建新会话时,通常意味着要么没有提供 cookie(会话未知),要么存在会话 cookie,但会话本身已过期。

有关标准会话语义和生命周期的完整说明,请查看Java™ Servlet Specification 的第 7.1 节会话跟踪机制。

【讨论】:

    【解决方案2】:

    我想通了,问题出在 chrome 上。在我向响应中添加标头“Expires”之前,它会将 cookie 视为会话 cookie

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2015-03-03
      相关资源
      最近更新 更多