Cookie 历来指就着牛奶一起吃的点心。然而,在因特网内,“Cookie”这个字有了完全不同的意思。那么“Cookie”到底是什么呢?“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。

Cookie特点

Cookie内存大小受限

IE 6.0 IE 7.0 8.0 Opera Fire Fox Safari Chrome
Cookie个数 每个域名下20个 每个域名下50个 每个域名30个 每个域名50个 没有限制 每个域名53个
Cookie大小 4095字节 4095字节 4096字节 4097字节 4097字节 4097字节

Cookie具有生命周期

Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。 Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。

Cookie满足同源策略

虽然网站images.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie。 问题来了 举个例子: 访问玩zhidao.baidu.com 再访问wenku.baidu.com还需要重新登陆百度账号吗? 解决办法: 设置document.domain = ‘baidu.com’; 让页面属于这个基础域名下(那么此页面和任何二级域名为baidu.com的)

封装自己Cookie的增删改查函数

/*
    2017/02/20
    cookie操作
 */function setCookie(key, value, iDay) {
    var oDate = new Date();
    oDate.setDate(oDate.getDate() + iDay);
    document.cookie = key + '=' + value + ';expires=' + oDate; }function removeCookie(key) {
    setCookie(key, '', -1);//这里只需要把Cookie保质期退回一天便可以删除}function getCookie(key) {
    var cookieArr = document.cookie.split('; ');    for(var i = 0; i < cookieArr.length; i++) {        var arr = cookieArr[i].split('=');        if(arr[0] === key) {            return arr[1];
        }
    }    return false;
}

SpringMVC与Cookie

@CookieValue的作用

用来获取Cookie中的值

@RequestMapping("/testCookie")
public String testCookie(@CookieValue(value="name",required=false) String name,
        @CookieValue(value="age",required=false) Integer age){
    System.out.println(name+","+age);
    return "hello";
}

通过Request操作Cookie

/**  
         * 读取所有cookie  
         * 注意二、从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期  
         * @param request  
         * @param response  
         */  
        @RequestMapping("/showCookies")  
        public void showCookies(HttpServletRequest request,HttpServletResponse response ){  
               
            Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组  
            if (null==cookies) {  
                System.out.println("没有cookie=========");  
            } else {  
                for(Cookie cookie : cookies){  
                    System.out.println("name:"+cookie.getName()+",value:"+ cookie.getValue());  
                }  
            }  
               
        }  
        /**  
         * 添加cookie  
         * @param response  
         * @param name  
         * @param value  
         */  
        @RequestMapping("/addCookie")  
        public void addCookie(HttpServletResponse response,String name,String value){  
            Cookie cookie = new Cookie(name.trim(), value.trim());  
            cookie.setMaxAge(30 * 60);// 设置为30min  
            cookie.setPath("/");  
            System.out.println("已添加===============");  
            response.addCookie(cookie);  
        }  
        /**  
         * 修改cookie  
         * @param request  
         * @param response  
         * @param name  
         * @param value  
         * 注意一、修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。  
         */  
        @RequestMapping("/editCookie")  
        public void editCookie(HttpServletRequest request,HttpServletResponse response,String name,String value){  
            Cookie[] cookies = request.getCookies();  
            if (null==cookies) {  
                System.out.println("没有cookie==============");  
            } else {  
                for(Cookie cookie : cookies){  
                    if(cookie.getName().equals(name)){  
                        System.out.println("原值为:"+cookie.getValue());  
                        cookie.setValue(value);  
                        cookie.setPath("/");  
                        cookie.setMaxAge(30 * 60);// 设置为30min  
                        System.out.println("被修改的cookie名字为:"+cookie.getName()+",新值为:"+cookie.getValue());  
                        response.addCookie(cookie);  
                        break;  
                    }  
                }  
            }  
               
        }  
        /**  
         * 删除cookie  
         * @param request  
         * @param response  
         * @param name  
         */  
        @RequestMapping("/delCookie")  
        public void delCookie(HttpServletRequest request,HttpServletResponse response,String name){  
            Cookie[] cookies = request.getCookies();  
            if (null==cookies) {  
                System.out.println("没有cookie==============");  
            } else {  
                for(Cookie cookie : cookies){  
                    if(cookie.getName().equals(name)){  
                        cookie.setValue(null);  
                        cookie.setMaxAge(0);// 立即销毁cookie  
                        cookie.setPath("/");  
                        System.out.println("被删除的cookie名字为:"+cookie.getName());  
                        response.addCookie(cookie);  
                        break;  
                    }  
                }  
            }  
        }

查看原文:http://www.coder306.cn/?p=176

Cookie的简介与使用的更多相关文章

  1. cookie技术简介

    Cookie简介 众所周知,HTTP协议是一个无状态的协议.一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.用户在浏览器的地址栏输入页面的URL,浏览器就会向Web Server ...

  2. session和cookie的简介

    Session(时域)在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session ...

  3. [Go] Cookie 使用简介

    Golang 的 Cookie web 开发免不了要和 cookie 打交道.Go 的 http 库也提供了 cookie 的相关操作. type Cookie struct { Name strin ...

  4. Cookie用法简介

    java操作Cookie---javax.servlet.http.Cookie 1.增加一个Cookie Cookie cookie = new Cookie("username" ...

  5. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie技术简介

    Cookie的英文原意是“点心”,它是在客户端访问Web服务器时,服务器在客户端硬盘上存放的信息,好像是服务器送给客户的“点心”.服务器可以根据Cookie来跟踪客户状态,这对于需要区别客户的场合(如 ...

  6. iOS之Cookie

    iOS之Cookie使用 简介 概念:Cookie中文名称叫做"小型文本文件",指某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常经过加 密). Web服务器可以用过Se ...

  7. cookie和session的那些事

    对于经常网购的朋友来说,经常会遇到一种情况: 打开淘宝或京东商城的首页,输入个人账号和密码进行登陆,然后进行购物,支付等操作都不需要用户再次输入用户名和密码 但是如果用户换一个浏览器或者等几个小时后再 ...

  8. Cookie 与 Session 的区别

    Cookie与Session的区别 cookie的简介 cookie是Web服务器保存在客户端的一系列文本信息 cookie的作用 对特定对象的追踪 统计网页浏览次数 简化登录 安全性能:容易信息泄露 ...

  9. koa 基础(十四)cookie 的基本使用

    1.app.js /** * cookie的简介: * 1.cookie保存在浏览器客户端 * 2.可以让我们用同一个浏览器访问同一个域名的时候共享数据 * * cookie的作用: * 1.保存用户 ...

随机推荐

  1. Java学习之路【第一篇】:前言

    Java 语言概述 一.什么是Java语言 Java语言是美国Sun公司(Stanford University Network),在1995年推出的高级的编程语言.所谓编程语言,是计算机的语言,人们 ...

  2. CustomerDAO及CustomerImpl的实现 & CustomerImpl的单元测试

    BaseDAO:封装了针对于数据表的操作,提供通用的方法,完成后续针对具体表的逻辑 CustomerDAO:此接口用于规范 针对customers表的常用操作 CustomerDAOImpl:继承Ba ...

  3. CSS 风车(花瓣)旋转动画圆角

    这是一个综合的案例,用到了transition(动画,动作在单位时间内完成),transform(旋转),border-radius(圆角),absolute(定位),linear-gradient( ...

  4. Zabbix漏洞学习

    Zabbix介绍 zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵 ...

  5. Spring boot Sample 012之spring-boot-web-upload

    一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.目的 spring boot 整合web实现文件上传下载 三.步骤 3.1.点击File -> New Project -& ...

  6. 跟着阿里学JavaDay06——Java基础语法(四)

    一.方法 方法执行到return语句后,这个方法的执行就结束了,方法可以有返回值,但可以不用这个返回值.方法首先要定义,然后才能调用. public class TestMethod{ public ...

  7. Sublime Text3 注册码(Windows/Build 3176版本)| 开发工具

    转自:dushusir.com 1.修改hosts文件(路径:C:\Windows\System32\drivers\etc): 0.0.0.0 www.sublimetext.com 0.0.0.0 ...

  8. Java并发编程 (二) 并发基础

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.CPU多级缓存-缓存一致性 1.CPU多级缓存 ​ 上图展示的是CPU高级缓存的配置,数据的读取和存 ...

  9. Linux (三) 基础命令 上

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一 . 背景知识 1. Linux系统中一切皆文件 在Linux系统中任何东西都是以文件形式来存储的.这 ...

  10. Java实现蓝桥杯VIP算法训练 小生物的逃逸

    试题 算法训练 小生物的逃逸 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 空间中有n个球,这些球不相交也不相切.有m个可以视为质点的小生物,可能在某些球内,也可能在所有球之外,但 ...