Java Servlet Cookie 详解

HTTP Cookies是Web应用程序可以存储在访问Web应用程序的用户的客户机上的一小部分数据。 通常最多4千字节的数据。我将解释如何设置,读取和删除Java Servlet(或JSP)内部的Cookie。

为什么有个或JSP呢,因为Jsp其实是Servlet演变来的,它具备Servlet的所有性质。但是它偏向于做模版引擎。

Java Cookie 示例

你能用HttpServletResponse对象来设置cookie。

Cookie cookie = new Cookie("myCookie", "myCookieValue");

response.addCookie(cookie);

这个cookie通过name:myCookie;value:myCookieValue。被识别和鉴定。它的name属性必须是唯一,就像哈希地址一样。只要浏览器访问Web应用程序,它就会将存储在客户机上的Cookie提交给Web应用程序。 仅提交访问的Web应用程序存储的Cookie。 不需要提交来自其他Web应用程序的Cookie。

从浏览器发送的数据中获取cookie

Cookie[] cookies = request.getCookies();

可以看到它获取到的是一个cookie数组,所以我们要遍历这个数组来找到自己想要的一部分。它也有可能是null。

Cookie[] cookies = request.getCookies();

String userId = null;
for(Cookie cookie : cookies){
    if("uid".equals(cookie.getName())){
        userId = cookie.getValue();
    }
}

Cookie 的生命周期

cookie的生命周期是干啥用的呢,简单的说:是为了客户安全,你可以设置一个合适的生命周期来保护客户的隐私。

Cookie cookie = new Cookie("uid", "123");

cookie.setMaxAge(24 * 60 * 60);  // 24 hours. 

response.addCookie(cookie);

可以看到,设置了cookie后,需要在response对象上进行添加,它会告诉浏览器。我设置的生命周期是多少,浏览器会按照这个时间对cookie做销毁处理。

删除cookie

删除cookie是浏览器的任务,上面说到cookie的生命周期,但是总会有一些特殊的情况。比如你想立刻删除该用户的cookie,防止他进行违法操作。那可以给它的生命周期设置为0,如果你想让用户关闭浏览器的一瞬间删掉cookie,那你就给它的生命周期赋值为-1.

Cookie cookie = new Cookie("uid", "");

cookie.setMaxAge(0);   //或者-1

response.addCookie(cookie);

有的人想,如果以前有个生命周期还没结束的cookie,我再给它新赋值为0,那浏览器会执行哪个。
这个问题servlet官网有声明:If the browser already has a cookie stored with the name "uid", it will be deleted after receiving the cookie with the same name ("uid") with an expiration time of 0. 意思是优先执行新收到的cookie的生命周期。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,430评论 11 349
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 5,234评论 0 10
  • 转自陈明乾的博客,可能有一定更新。 转原文声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、...
    C86guli阅读 10,147评论 6 72
  • 文:云水禅心 倾一世繁华, 持一生清雅。 不管风和月, 从容弹琵琶。 青青丝瓜架 文:清语 青青丝瓜架...
    快乐中坚持阅读 4,185评论 2 4
  • LeetCode Problems Solutions question description: 问题描述 Gi...
    037e3257fa3b阅读 955评论 0 0