在servlet中获取cookie

Posted

技术标签:

【中文标题】在servlet中获取cookie【英文标题】:Getting cookie in servlet 【发布时间】:2012-06-18 08:08:23 【问题描述】:

我正在尝试使用 servlet 获取 cookie

Cookie[] cookie = request.getCookies();

cookie 始终是null

所以我从另一个 servlet 设置它们,它们出现在浏览器首选项中。

Cookie cookie = new Cookie("color", "cyan");
cookie.setMaxAge(24*60*60);
cookie.setPath("/");
response.addCookie(cookie);

我不明白怎么了?

【问题讨论】:

你在哪里调用这个代码? 浏览器是否使用相同的域名、协议和端口(例如example.com:80)访问另一个servlet。 【参考方案1】:

我遇到了同样的问题,并发现我的原因是我使用的是 Eclipse 内置的浏览器。这不接受cookies。当我从 chrome 访问同一个 JSP 时,它起作用了。也许你正在做和我一样的事情?

也可能是您使用的浏览器或您的互联网设置被设置为拒绝 cookie。希望这可以帮助您或遇到相同问题的任何其他访问者。

【讨论】:

【参考方案2】:

设置饼干

  Cookie cookie = new Cookie("cookiename", "cookievalue");
  response.addCookie(cookie);

获取 COOKIE

  Cookie[] cookies = request.getCookies();
  if(cookies != null) 
      for (int i = 0; i < cookies.length; i++) 
          cookie=cookies[i]
          String cookieName = cookie.getName();
          String cookieValue = cookie.getValue();
       
   

【讨论】:

只能读字母,不能读字母数字或特殊符号?可能是什么原因? 给cookie添加timelife怎么样?有可能吗?【参考方案3】:

您确定客户端支持 cookie 吗?因为如果它被配置为不接受 cookie,您将永远无法在以下请求中取回它们...

【讨论】:

【参考方案4】:

首先,你应该创建一个cookie,然后添加到响应中

Cookie cookie = new Cookie(name,value);
response.addCookie(cookie);

【讨论】:

我以这种方式从另一个 servlet 添加 cookie @Anatoly 另一个 servlet 是否在您的同一个域和子域上?【参考方案5】:

According to docs getCookies() 返回一个数组,其中包含客户端随此请求发送的所有 Cookie 对象。如果没有发送 cookie,则此方法返回 null。

您是否正确添加了 cookie?如果是,您应该能够遍历使用

返回的 cookie 列表
Cookie[] cookies = request.getCookies();

for (int i = 0; i < cookies.length; i++) 
  String name = cookies[i].getName();
  String value = cookies[i].getValue();

如果没有...

Cookie 是通过响应对象中的addCookie(Cookie) 方法添加的!

【讨论】:

所以我的意思是我从另一个 servlet 添加了 cookie,而那个 servlet 确实添加了 cookie,但是当我尝试获取 request.getCookie() 时返回 null。 请注意“如果没有发送 cookie,则此方法返回 null。”,如果 getCookies() 返回 null,则在执行 cookies.length 时,给定代码将失败并出现 NullPointerException。

以上是关于在servlet中获取cookie的主要内容,如果未能解决你的问题,请参考以下文章

Jsp Cookie

Cookie的使用

servlet 从java中获取参数

怎么在servlet中获取单个<select>标签的值

在servlet中怎样获取jsp中下拉列表中的值

在servlet中获取cookie