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. 2 Modals of necessity

    1 情况动词must 和词组have to, need to ,have got to 都表示必须做某事或者要求做某事. need to  have to  must have got to When ...

  2. Docker安装部署redis

    借鉴博客:https://my.oschina.net/u/3489495/blog/1825335 待续... >>>>>>>>>docker安 ...

  3. 使用npm安装一些包失败了,更换npm源

    镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https://regist ...

  4. Android——MaterialDesign之四 FloatingActionButton、Snackbar、CoordinaterLayout

    FloatingActionButton 悬浮按钮,默认colorAccent来作为按钮的颜色 <android.support.design.widget.FloatingActionButt ...

  5. java学习之—排序

    package test3; public class Sort{ /** * 冒泡排序 * @param array */ public void bubbleSort(int[] array) { ...

  6. git简介及安装(win10)

    一句话介绍git Git是Linus Torvalds编写,目前是世界上最先进的分布式版本控制系统. git能干什么? 代码备份.还原,版本管理,分支管理,解决冲突,协同开发... 安装git > ...

  7. xadmin快速搭建后台管理系统

    一.xadmin的特点: 1.基于Bootstrap3:Xadmin使用Bootstrap3.0框架精心打造.基于Bootstrap3,Xadmin天生就支持在多种屏幕上无缝浏览,并完全支持Boots ...

  8. 网站滚动n个像素后,头部固定

    //固顶 $(window).scroll(function() { var top = $(window).scrollTop(); if(top>=1200){ $(".x_men ...

  9. Deconvolution用法

  10. PHP——emjoin表情存入数据库

    前言 还有一种解决的方法是更改数据库,这里就不写了,这里直接对emoji进行转码 代码 mb_strlen() | strlen() | rawurlencode() | rawurldecode() ...