zoukankan      html  css  js  c++  java
  • Javascript如何操作(创建/读取/删除)cookie

    曲奇(小甜点),来源于英语COOKIE。

    cookie这个词想必很多做前段的朋友都接触过,但是没有详细的了解以及操作过。如何的确如此,那么就停下来了解一下如何通过JS来操作cookie值吧!

    通过本文你将粗略的明白cookie是什么,如何通过js创建/存储以及获取cookie,如何让cookie过期来删除cookie...

    什么是cookie?

    cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

    来自w3school的解释

    某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie。

    MSIE的帮助信息

    不同的浏览器针对cookie操作的方式不一样(比如ie是生成一个文本)。通俗一点的说,cookie就是比html高级一点的程序创建的,保存在客户端(就是你的电脑)来记录用户的一些信息的东西。

    Cookie的结构:

    每个cookie的结构都是这样的 cookie的名字=cookie的值 cookie的名字与值的命名方面同js的命名规则差不多,只不过多了“只能用可以用在url编码中的字符”,即如果保存汉字的话,需要用escape()编码,然后读取的时候用unescape()解码;

    每个cookie都有过期时间,当电脑的时间过了给定的过期时间,这个cookie就会失效。js无法直接删除cookie值,但是可以通过设置失效日期来让此cookie无法工作。

    如何创建/保存cookie:

    创建cookie的方法,用到的是documents.cookie属性;给cookie赋值的方法如下:

    documents.cookie = 'cookieName=' + escape('cookieValue')+ ';expires=' + expirationDateObj.toGMTString();

    看到这些是否有些麻木呢?其实说明一下很简单,cookieName是你的cookie的名字,比如“niumowang_cookie”;cookieValue是你的cookie的值,比如“牛魔王的世界观”;expirationDateObj 是保存过期时间的对象名,toGMTString()是将时间设置成GMT(格林尼治时间),cookie只支持此时间格式。如果这里不设置时间的话,默认是浏览器关闭窗口cookie过期。

    OK,我们来看一个保存用户名字的cookie示例,我们设置一个 “name”=“pizi”的cookie,并在2个月过期

    function setCookie(){
    var expires = new Date();
    expires.setTime(expires.getTime() + 2 * 30 * 24 * 60 * 60 * 1000);
    /* 2个月 x  30 天 x  24 小时 x  60 分 x 60 秒 x  1000 毫秒 */
    documents.cookie = 'name=pizi;expires=' + expires.toGMTString();
    }

    上面的pizi没有用escape编码是因为,escape编码后的结果就是escape

    js 如何读取cookie:

    function getCookie(c_name)
    {
    if (document.cookie.length>0)
      {
      c_start=document.cookie.indexOf(c_name + "=")
      if (c_start!=-1)
        {
        c_start=c_start + c_name.length+1
        c_end=document.cookie.indexOf(";",c_start)
        if (c_end==-1) c_end=document.cookie.length
        return unescape(document.cookie.substring(c_start,c_end))
        }
      }
    return ""
    }
    上面的函数首先会检查 document.cookie 对象中是否存有 cookie。假如 document.cookie 对象存有某些 cookie,那么会继续检查我们指定的 cookie 是否已储存。如果找到了我们要的 cookie,就返回值,否则返回空字符串。

    js如何删除cookie:

    function delCookie (NameOfCookie)
    {
    // 检查cookie是否设置,如果设置了则将过期时间调到过去的时间;
    //Thu, 01-Jan-70 00:00:01 GMT,该时间为1970年1月1号
    if (getCookie(NameOfCookie)) {
    document.cookie = NameOfCookie + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }

    上面函数检测是否设置了名字为 NameOfCookie的cookie,如果设置的话将该cookie的失效日期调到1970年1月1号,这样该cookie就会失效,剩下的就是浏览器处理过期cookie的机制了。关于该时间,可以参考:关于1970-1-1 00:00:0000的知识

    js操作cookie教程与实例:

    w3school有一些关于js操作cookie的教程,并附带一个欢迎cookie的示例,有兴趣的朋友去看下,地址:http://www.w3school.com.cn/js/js_cookies.asp

    下面是js操作cookie的示例演示:运行代码会提示输入用户名,然后关闭打开的窗口再运行一次代码会看到效果。或者另存为html文件查看演示

    <html>
    <head>
    <script type="text/javascript">
    function getCookie(c_name)
    {
    if (document.cookie.length>0)
    {
    c_start=document.cookie.indexOf(c_name + "=")
    if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1
    c_end=document.cookie.indexOf(";",c_start)
    if (c_end==-1) c_end=document.cookie.length
    return unescape(document.cookie.substring(c_start,c_end))
    }
    }
    return ""
    }

    function setCookie(c_name,value,expiredays)
    {
    var exdate=new Date()
    exdate.setDate(exdate.getDate()+expiredays)
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
    }

    function checkCookie()
    {
    username=getCookie('username')
    if (username!=null && username!="")
    {alert('Welcome again '+username+'!')}
    else
    {
    username=prompt('Please enter your name:',"")
    if (username!=null && username!="")
    {
    setCookie('username',username,365)
    }
    }
    }
    </script>
    </head>

    <body onLoad="checkCookie()">
    </body>
    </html>

  • 相关阅读:
    python中可变类型和不可变类型
    python PEP8开发规范
    pandas之——Series常用总结
    python os 模块的使用
    Markdown语法
    HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查
    MySQL union all排序问题
    mysql解决datetime与timestamp精确到毫秒的问题
    keepalived + nginx实现高可用
    配置文件keepalived.conf详解
  • 原文地址:https://www.cnblogs.com/smiler158/p/3710297.html
Copyright © 2011-2022 走看看