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. [JavaWeb基础] 015.Struts2 表单验证框架

    在web开发的过程中,我们经常要用到一些填写表单的操作,我们一般都要在提交表单信息的时候对表单的内容进行验证,struts2给我们提供了简单的实现接口,让我们可以很容易的对表单进行验证.下面讲解下最传 ...

  2. static关键字修饰属性

    static 静态的,可以修饰属性,方法,代码块(或初始化块) , 内部内 非static修饰的属性(实例变量):各个对象各自拥有一套各自的副本 static修饰属性(l类变量): 1.由类创建的所有 ...

  3. ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作

    前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...

  4. Golang基础教程——map使用篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第7篇文章,我们来聊聊golang当中map的用法. map这个数据结构我们经常使用,存储的是key-value的键 ...

  5. [06]HTML基础之表单标签

    1. <form>标签 表单容器,指定method属性和action属性是个良好的习惯. <form methor="POST" action="htt ...

  6. 【Win10】BeyondCompare时提示"许可证密钥已被撤销"的解决办法

    删除...AppData\Roaming\Scooter Software\Beyond Compare 3目录下所有文件. 应该是对应了bcompare的配置文件以及记录文件.删除了之后,就等于新安 ...

  7. 第六届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...

  8. Java实现第八届蓝桥杯魔方状态

    魔方状态 题目描述 二阶魔方就是只有2层的魔方,只由8个小块组成. 如图p1.png所示. 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下: 前面:橙色 右面:绿色 上面:黄色 ...

  9. 【1】svn 指令总结

    [1]svn log 1.svn log 2. [2]svn di [3]

  10. 对学长TD课程通(.apk)的评价

    界面简介: 界面分为三个部分,第一部分是对课程表的添加,第二部分是对空闲教室的查询,第三部分是实时时间的展示和对软件的评价,实用性很强,仅限于本校学生,界面观赏性较差,从界面上对人的吸引力不够, 实用 ...