JS中Cookie详解及示例展示

3 篇文章 1 订阅

Cookie的作用

cookie机制将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点。它可以用于以下几种场合。

  • (1)保存用户登录状态。例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供这样的功能。 cookie还可以设置过期时间,当超过时间期限后,cookie就会自动消失。因此,系统往往可以提示用户保持登录状态的时间:常见选项有一个月、三个月、一年等。
  • (2)跟踪用户行为。例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的,当利用了
    cookie后就会显得很人性化了,系统能够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区的天气情况。因为一切都是在后 台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便。
  • (3)定制页面。如果网站提供了换肤或更换布局的功能,那么可以使用cookie来记录用户的选项,例如:背景色、分辨率等。当用户下次访问时,仍然可以保存上一次访问的界面风格。
  • (4)创建购物车。正如在前面的例子中使用cookie来记录用户需要购买的商品一样,在结账的时候可以统一提交。例如淘宝网就使用cookie记录了用户曾经浏览过的商品,方便随时进行比较。

当然,上述应用仅仅是cookie能完成的部分应用,还有更多的功能需要全局变量。cookie的缺点主要集中于安全性和隐私保护。主要包括以下几种:

  • (1)cookie可能被禁用。当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能;
  • (2)cookie是与浏览器相关的。这意味着即使访问的是同一个页面,不同浏览器之间所保存的cookie也是不能互相访问的;
  • (3)cookie可能被删除。因为每个cookie都是硬盘上的一个文件,因此很有可能被用户删除;
  • (4)cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。

Cookie保存的格式及其属性介绍

在cookie的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格。在cookie的名中做到这点很容易,但要保存的值是不确定的。如何来存储这些值呢?方法是用encodeURI()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储到cookie的值中,而且使用此种方案还可以避免中文乱码的出现。在获取cookie时可以通过decodeURI()方法对cookie进行解码,然后获取其值。

  1. Cookie的保存格式为(每个属性之间通过:’分号+空格’(; )隔开;):document.cookie=”name=value; expires=evalue; path=pvalue; domain=dvalue; secure=svalue;”
  2. Cookie 参数值的意思:
    name:表示要存入对象的名称,唯一必须设置的参数(通常使用:user@domain格式命名,user为本地用户,domain为所访问网站的域名)。value:表示要存入得值。
    expires:该对象的有效时间(可选)(默认为当前浏览器会话有用,关闭浏览器就消失);
    path:指定该Cookie作用范围(可选)(即:在那些网页上有效,默认情况下对于当前网页所在的同一目录下的所有页面有效);
    domain:设置web服务器的Cookie共享域(可选)(如:test*.com)表示域名为test*.com的服务器共享该Cookie
    secure:设置Cookie的传输过程是否加密(可选)(一般为SSH加密)
  3. Cookie的保存、获取、删除的方法

    保存Cookie:直接通过document.cookie=”str”;即可保存cookie对象参考下方示例的setCookie()方法;

    获取Cookie:获取浏览器中的Cookie时,只能够一次获取所有的cookie值,而不能指定cookie名称来获得指定的值,这正是处理cookie值最麻 烦的一部分。用户必须自己分析这个字符串,来获取指定的cookie值。参考示例中的getCookie(cName)方法;

    删除Cookie:删除Cookie就是简单的将cookie的expires属性设置为一个过去的时间即可;

JS对Cookie存取及删除操作示例

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>js中cookie操作</title>

<script type="text/javascript">
    //保存表单中的信息到Cookie中
    function saveCookie(){
        var userName = document.getElementById("username").value;
        var password = document.getElementById("password").value;
        console.log(userName+password);
        var date = new Date();
    //  date.setDate(date.getDate()+1);
        date.setTime(date.getTime()+5000);
        //将cookie保存5秒钟
        setCookie("userName",userName,date.toGMTString(),"","","");
        setCookie("password",password,date.toGMTString(),"","","");
        showCookie()
        }

    //设置Cookie
    /*
    在cookie的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格。在cookie的名中做到这点很容易,但要保存的值是不确定的。如何
    来存储这些值呢?方法是用encodeURI()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储于
    cookie值中,而且使用此种方案还可以避免中文乱码的出现。在获取cookie时可以通过decodeURI()方法对cookie进行解码。

    Cookie的保存格式为:"name=value; expires=evalue; path=pvalue;"
    每个属性之间通过:'分号+空格'(; )隔开;

    参数值的意思:
    name:表示要存入对象的名称,唯一必须设置(通常使用:user@domain格式命名,user为本地用户,domain为所访问网站的域名)。value:表示要存入得值。
    expires:该对象的有效时间(可选)(默认为当前浏览器会话有用,关闭浏览器就消失);
    path:指定该Cookie作用范围(可选)(即:在那些网页上可用);
    domain:设置web服务器的Cookie共享域(可选)(如:test*.com)表示域名为test*.com的服务器共享该Cookie
    secure:设置Cookie的传输过程是否加密(可选)(一般为SSH加密)
    */
    function setCookie(name,value,expires,path,domain,secure){
        document.cookie=name+"="+encodeURI(value)+
        ((expires) ? "; expires=" + expires : "")+
        ((path) ? "; path=" + path : "")+
        ((domain) ? "; domain=" + domain : "")+
        ((secure) ? "; secure=" + secure : "");
        }
    /**
        获取浏览器中的Cookie时,只能够一次获取所有的cookie值,而不能指定cookie名称来获得指定的值,这正是处理cookie值最麻 烦的一部分。
        用户必须自己分析这个字符串,来获取指定的cookie值
    **/
        //获取浏览器中的Cookie
    function getCookie(cName){
        var cookieString = decodeURI(document.cookie);
        var cookieArray = cookieString.split("; ");
        console.log(cookieArray.length);
        for(var i = 0; i < cookieArray.length; i++){
            var cookieNum = cookieArray[i].split("=");
            console.log(cookieNum.toString());
            var cookieName = cookieNum[0];
            var cookieValue = cookieNum[1];

            if(cookieName == cName){
                return cookieValue;
                }
            }
        return false;
        }
        function showCookie(){
            var txt =  document.getElementById("txt_showCookie");
            txt.value = "用户名:"+getCookie("userName")+"\n密码:"+getCookie("password");
        }

        //删除Cookie就是简单的将cookie的expires属性设置为一个过去的时间即可。
        function deleteCookie(){
            var date = new Date();
            date.setTime(date.getTime()-1000);
            setCookie("userName",password,date.toGMTString(),"","","");
            setCookie("password",password,date.toGMTString(),"","","");
            showCookie();
            }
</script>

</head>
<body onLoad="showCookie()">
<from>
    <input type="text" id="username" name="username" placeholder="用回名"/><br/>
    <input type="password" id="password" name="password" placeholder="密码"><br/>
    <input type="button" onClick="saveCookie()" value="保存cookie" />
    <input type="button" onClick="deleteCookie()" value="删除cookie"/>
<br/>
<label>cookie显示区域</label><br/>
<textarea id="txt_showCookie" placeholder="cookie显示区域" rows="6" cols="30">

</textarea>
</from>
</body>
</html>

运行截图:
这里写图片描述
这里写图片描述
注:
- 由于google浏览器禁用了本地网页的cookie操作,只能通过在线方式操作本地的cookie,故该实例在google浏览器上测试是不起作用的。
- 火狐浏览器支持本地网页的cookie操作,该实例可以放在FF浏览器上测试。

知识扩展

HTML5中提供了更加强大的本地储存解决方案(sessionStorage、localStorage、Web SQL Database)可储存的数据结构更加复杂,数据量更大,有兴趣者可参考http://blog.csdn.net/update_java/article/details/47274161

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值