1. Cookie机制是采用客户端保持Http状态信息的方案。
  2. Cookie是在浏览器访问web服务器的某个资源的时候,由web服务器在http响应消息头中附带给浏览器的一个小文本文件。
  3. 一旦web服务器保存了某个Cookie,那么它在以后每次访问该web服务器的时候都会在http请求头中将这个cookie回传给web服务器。
  4. 底层实现原理:web服务器通过http响应消息中增加Set_cookie响应头字段将cookie信息发送给服务器,浏览器则通过在http请求消息中增加Cookie请求头字段将cookie回传给web服务器。
  5. 一个cookie只能标识一种信息,它至少含有一个标识该信息的名称Name和设置值Value。
  6. 一个web站点可以给一个web浏览器发送多个cookie,一个web浏览器也可以存储多个web站点提供cookie。
  7. 浏览器一般只允许存放300个cookie,每个站点最多存放20个cookie,每个cookie的大小限制为4kb。

cookie传送流程:

第一次响应返回cookie代码:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <%
  11. Cookie cookie = new Cookie("name", "soyoungboy");
  12. response.addCookie(cookie);
  13. %>
  14. </body>
  15. </html>
在浏览器里面观察信息,响应里面有服务器端我刚刚设置的cookie信息:

再次访问会将服务器端返回的cookie携带上:

cookie相关api:

1 设置最大生存时间,以秒为单位:

cookie.setMaxAge(60);

2 指定目录中所有页面以及该目录子目录的所有页面可见,cookie路径必须包含设置cookie的servlet,例如/catalog,它使得cookie对于服务器上的/catalog下的所有目录都是可见的。

cookie.setPath("/test/test2"):

3 创建cookie:

response.addCookie(cookie);

4 读取cookie:

Cookie[] cookies = request.getCookies();

5 删除cookie:

Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0);

6 修改cookie:

// 创建一个已存在key的Cookie对象
Cookie cookie = new Cookie("cookie-name", null);
// 修改Cookie的值
cookie.setValue("this is new value");
// 通知浏览器保存修改
response.addCookie(cookie);

Cookie生命控制

Cookie对象的.setMaxAge( ) 方法控制Cookie的存活。

Cookie的默认存活时间(会话)setMaxAge为负数,表示会话级。也就是说浏览器一旦关闭,Cookie就会被删除。
Cookie的删除 setMaxAge 零表示马上删除。表示浏览器一收到响应,马上就会删除Cookie。
Cookie的保存 setMaxAge 正数表示多少秒之后删除

当我们创建一个新Cookie的时候。Cookie的默认存活时间为会话时间。也就是只要一关浏览器。cookie就会过期,被删除。
当我们调用setMaxAge( 0 ) 为零的时候。表示浏览器一收到响应后,就马上删除Cookie
当我们调用setMaxAge( 正页 ) 的时候,表示Cookie将在多少秒后过期。

如何查看cookie?

谷歌浏览器,直接按下F12功能键,会弹出调试工具,选择Resource-----Cookies----localhost查看localhost域名下的cookie。

如果是火狐浏览器。同样按下F12功能键,弹出调试工具(一定要记住启用所有窗口)。选择Cookies选择卡


如下内容参考网络上面的资源:https://www.oschina.net/code/snippet_2001568_48014

js实现cookie增删改查

添加cookie:

  1. <script language="JavaScript" type="text/javascript">
  2.  
  3. function addCookie(name,value,expiresHours){
  4. var cookieString=name+"="+escape(value);
  5. //判断是否设置过期时间,0代表关闭浏览器时失效
  6. if(expiresHours>0){
  7. var date=new Date();
  8. date.setTime(date.getTime+expiresHours*3600*1000);
  9. cookieString=cookieString+"; expires="+date.toGMTString();
  10. }
  11. document.cookie=cookieString;
  12. }
  13.  
  14. </script>

修改cookie:

  1. <script language="JavaScript" type="text/javascript">
  2.  
  3. function editCookie(name,value,expiresHours){
  4. var cookieString=name+"="+escape(value);
  5. //判断是否设置过期时间,0代表关闭浏览器时失效
  6. if(expiresHours>0){
  7. var date=new Date();
  8. date.setTime(date.getTime+expiresHours*3600*1000); //单位是多少小时后失效
  9. cookieString=cookieString+"; expires="+date.toGMTString();
  10. }
  11. document.cookie=cookieString;
  12. }
  13.  
  14. </script>

获取指定名称的cookie:

  1. <script language="JavaScript" type="text/javascript">
  2.  
  3. function getCookie(name){
  4. var strCookie=document.cookie;
  5. var arrCookie=strCookie.split("; ");
  6. for(var i=0;i<arrCookie.length;i++){
  7. var arr=arrCookie[i].split("=");
  8. if(arr[0]==name){
  9. return unescape(arr[1]);
  10. }else{
  11. return "";
  12. }
  13. }
  14.  
  15. }
  16.  
  17. </script>

删除指定的cookie:

  1. <script language="JavaScript" type="text/javascript">
  2.  
  3. function deleteCookie(name){
  4. var date=new Date();
  5. date.setTime(date.getTime()-10000); //设定一个过去的时间即可
  6. document.cookie=name+"=v; expires="+date.toGMTString();
  7. }
  8.  
  9. </script>

java实现cookie增删改查:

  1. /**
  2. * 根据名字获取cookie
  3. * @param request
  4. * @param name cookie名字
  5. * @return
  6. */
  7. public Cookie getCookieByName(HttpServletRequest request,String name){
  8. Map<String,Cookie> cookieMap = ReadCookieMap(request);
  9. if(cookieMap.containsKey(name)){
  10. Cookie cookie = (Cookie)cookieMap.get(name);
  11. return cookie;
  12. }else{
  13. return null;
  14. }
  15. }
  16.  
  17. /**
  18. * 将cookie封装到Map里面
  19. * @param request
  20. * @return
  21. */
  22. private Map<String,Cookie> ReadCookieMap(HttpServletRequest request){
  23. Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
  24. Cookie[] cookies = request.getCookies();
  25. if(null!=cookies){
  26. for(Cookie cookie : cookies){
  27. cookieMap.put(cookie.getName(), cookie);
  28. }
  29. }
  30. return cookieMap;
  31. }

通过SpringMvc来进行增删改查:

  1. **
  2. * 读取所有cookie
  3. * 注意二、从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交namevalue属性。maxAge属性只被浏览器用来判断Cookie是否过期
  4. * @param request
  5. * @param response
  6. */
  7. @RequestMapping("/showCookies")
  8. public void showCookies(HttpServletRequest request,HttpServletResponse response ){
  9.  
  10. Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
  11. if (null==cookies) {
  12. System.out.println("没有cookie=========");
  13. } else {
  14. for(Cookie cookie : cookies){
  15. System.out.println("name:"+cookie.getName()+",value:"+ cookie.getValue());
  16. }
  17. }
  18.  
  19. }
  20. /**
  21. * 添加cookie
  22. * @param response
  23. * @param name
  24. * @param value
  25. */
  26. @RequestMapping("/addCookie")
  27. public void addCookie(HttpServletResponse response,String name,String value){
  28. Cookie cookie = new Cookie(name.trim(), value.trim());
  29. cookie.setMaxAge(30 * 60);// 设置为30min
  30. cookie.setPath("/");
  31. System.out.println("已添加===============");
  32. response.addCookie(cookie);
  33. }
  34. /**
  35. * 修改cookie
  36. * @param request
  37. * @param response
  38. * @param name
  39. * @param value
  40. * 注意一、修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
  41. */
  42. @RequestMapping("/editCookie")
  43. public void editCookie(HttpServletRequest request,HttpServletResponse response,String name,String value){
  44. Cookie[] cookies = request.getCookies();
  45. if (null==cookies) {
  46. System.out.println("没有cookie==============");
  47. } else {
  48. for(Cookie cookie : cookies){
  49. if(cookie.getName().equals(name)){
  50. System.out.println("原值为:"+cookie.getValue());
  51. cookie.setValue(value);
  52. cookie.setPath("/");
  53. cookie.setMaxAge(30 * 60);// 设置为30min
  54. System.out.println("被修改的cookie名字为:"+cookie.getName()+",新值为:"+cookie.getValue());
  55. response.addCookie(cookie);
  56. break;
  57. }
  58. }
  59. }
  60.  
  61. }
  62. /**
  63. * 删除cookie
  64. * @param request
  65. * @param response
  66. * @param name
  67. */
  68. @RequestMapping("/delCookie")
  69. public void delCookie(HttpServletRequest request,HttpServletResponse response,String name){
  70. Cookie[] cookies = request.getCookies();
  71. if (null==cookies) {
  72. System.out.println("没有cookie==============");
  73. } else {
  74. for(Cookie cookie : cookies){
  75. if(cookie.getName().equals(name)){
  76. cookie.setValue(null);
  77. cookie.setMaxAge(0);// 立即销毁cookie
  78. cookie.setPath("/");
  79. System.out.println("被删除的cookie名字为:"+cookie.getName());
  80. response.addCookie(cookie);
  81. break;
  82. }
  83. }
  84. }
  85. }

Cookie知识点总结的更多相关文章

  1. Cookie 知识点再整理

    1. Cookie  是存储在客户端 内存 或者 硬盘(例如火狐把 Cookie 存储在 C:\Documents and Settings\用户名\Application Data\Mozilla\ ...

  2. Cookie知识点小结

    问题是什么?有哪些技术?如何解决? 1. Cookie 1)完成回话跟踪的一种机制:采用的是在客户端保存Http状态信息的方案 2)Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在 ...

  3. session和cookie知识点总结

    cookie小结:1.cookie是在服务端创建2.cooki是保存在浏览器这一端3.cookie的生命周期可以通过 cookie.setMaxAge(2000);(如果不设置生命周期,cookie的 ...

  4. cookie知识点

    1.springmvc框架中,cookie例子 jsp: <%-- Created by IntelliJ IDEA. User: 44262 Date: 2019/2/28 Time: 18: ...

  5. cookie 知识点

    cookie失效是由浏览器实现的,根据时间来控制,服务器端并不做cookie是否失效的验证. 某个cookie失效了浏览器发送请求时便不会带上它,服务器端自然就没有这个cookie了,所以对于服务器来 ...

  6. cookie知识点概述

    cookie是什么 这个讲起来很简单,了解http的同学,肯定知道,http是一个不保存状态的协议,什么叫不保存状态,就是一个服务器是不清楚是不是同一个浏览器在访问他,在cookie之前,有另外的技术 ...

  7. cookie知识点简点

    cookie几大作用: 1.保持用户登陆状态 2.跟踪用户行为 3.制定页面 4.创建购物车 cookie缺点: 1. 可能被禁用 2.可能被删除:cookie是一个文件,easy被用户删除 3.安全 ...

  8. (六)Cookie 知识点总结 (来自那些年的笔记)

    如果你想要转载话,可不可以不要删掉下面的 作者信息 呀!: 作者:淮左白衣 写于 2018年4月18日18:47:41 来源笔者自己之前学javaWeb的时候,写的笔记 : 目录 如果你想要转载话,可 ...

  9. js与cookie的domain和path之间的关系

    1.前言 使用javascript操作cookie我们都经常使用,对cookie不是很了解的话可以看下这篇帖子[javascript操作cookie](http://www.cnblogs.com/D ...

随机推荐

  1. js如何复制一个对象?

    方法一: 把原来对象的属性遍历一遍,赋给一个新的对象. //深复制对象方法 var cloneObj = function (obj) { var newObj = {}; if (obj insta ...

  2. PMP三点

    三点估算:悲观36天,可能21天,乐观6天.在16至26天内完成的概率是多少?这个算法是PERT估算最终估算结果=(悲观工期+乐观工期+4×最可能工期)/6=(36+6++4*21)/6=21标准差= ...

  3. vue-router路由懒加载(解决vue项目首次加载慢)

    懒加载:----------------------------------------------------? 也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载? 像vue这种单 ...

  4. java使用顺序存储实现队列

    详细连接  https://blog.csdn.net/ljxbbss/article/details/78135993 操作系统:当电脑卡的时候,如果不停点击,还是卡死,最后终于电脑又好了以后,操作 ...

  5. Android常用的技术框架与博客社区

    技术框架 图片加载 Glide Fresco Volley Picasso Universal Image Loader 网络请求 okhttp retrofit Volley android-asy ...

  6. python学习笔记(3)--turtle简单绘制

    参考:大学生mooc 北京理工大学的python程序与设计课程 蟒蛇绘制代码如下: #pythonDraw.py import turtle turtle.setup(650,350,200,200) ...

  7. git ignore 忽略 idea文件

    下载了项目组的代码之后发现,一个问题,一编译就生成了很多的 .idea文件夹 还有 target文件夹,这些是不需要提交到git上的, 需要提交的时候屏蔽一下,所以需要建立一个ignore文件列表把他 ...

  8. Javaweb小结之——JavaBean+持久层

    数据持久层学习了JDBC.连接池以及DBUtil 思考一下,在学会使用SSM框架之前,还是先多使用DBUtil吧 数据库持久层的JDBC.连接池和DBUtil,这个链接给我了一些参考https://b ...

  9. vue实例相关2

    vue data中 对象/数组 不为空,即使定义为[]/{} new Vue({ el: '#main', data: { list: [], current: {}, aa:'' } }) cons ...

  10. Windows 7 SP1 x64 LSP

    NALapi.dll napinsp.dll pnrpnsp.dll mswsock.dll winrnr.dll