如何从听众那里获取 Cookie?
Posted
技术标签:
【中文标题】如何从听众那里获取 Cookie?【英文标题】:How to get the Cookies from listeners? 【发布时间】: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,它们已经在那里,我尝试了过滤器中的代码,它工作了 【参考方案1】:HttpServletRequest.getCookies()
返回请求中提供的 cookie - 如HttpServletRequest's javadoc 中所述。
当 servlet 容器创建新会话时,通常意味着要么没有提供 cookie(会话未知),要么存在会话 cookie,但会话本身已过期。
有关标准会话语义和生命周期的完整说明,请查看Java™ Servlet Specification 的第 7.1 节会话跟踪机制。
【讨论】:
【参考方案2】:我想通了,问题出在 chrome 上。在我向响应中添加标头“Expires”之前,它会将 cookie 视为会话 cookie
【讨论】:
以上是关于如何从听众那里获取 Cookie?的主要内容,如果未能解决你的问题,请参考以下文章