javascript快速入门20—Cookie

    在继续之前,我们先要学一学 Cookie 的基本知识。

    每个 Cookie 都是这样的:cookie名=cookie值;cookie本身仅仅是一个字符串,是一组名值对;多组名值对用分号加空格分隔!

    "cookie名"的限制与 JavaScript 的命名限制大同小异,少了“不能用 JavaScript 关键字”,多了“只能用可以用在 URL 编码中的字符”。后者比较难懂,但是只要你只用字母和数字命名,就完全没有问题了。“值”的要求也是“只能用可以用在 URL 编码中的字符”。

    每个 Cookie 都有失效日期,一旦电脑的时钟过了失效日期,这个 Cookie 就会被删掉。我们不能直接删掉一个 Cookie,但是可以用设定失效日期早于现在时刻的方法来间接删掉它。

    但这样获取到的是一堆混乱的字符串,必须对其进行处理才能知道它的含义!在类似ASP或PHP这样的服务器端脚本中,往往设置cookie十分简单

    1. response.cookies("cookieName")="cookieValue"
    2. //PHP
    3. setcookie("cookieName","cookieValue");

    方案一:直接截取字符串

    1. function getCookie(cookieName) { var start = document.cookie.indexOf(cookieName+"="); if (start ==-1) {return "";}
    2. start = start+cookieName.length+1; var end = document.cookie.indexOf(";",start); if (end=-1) {end = document.cookie.length;} return document.cookie.substring(start,end);
    3. }

    方案二:将Cookie拆分为数组,通过遍历取得

    方案三:使用正则表达式解析

    1. }

    设置Cookie

    • Cookie名称,Cookie名称必须使用只能用在URL中的字符,一般用字母及数字
    • Cookie值,Cookie值同样也只能使用可以用在URL中的字符,一般需要在设置Cookie值时对其使用encodeURI方法进行转义
    • Expires,过期日期,一个GMT格式的时间,当过了这个日期之后,浏览器就会将这个Cookie删除掉,当不设置这个的时候,Cookie在浏览器关闭后消失
    • Path,一个路径,在这个路径下面的页面才可以访问该Cookie,一般设为“/”,以表示同一个站点的所有页面都可以访问这个Cookie
    • Domain,子域,指定在该子域下才可以访问Cookie,例如要让Cookie在bbs.x-life.com下可以访问,但在news.x-life.com下不能访问,则可将domain设置成bbs.x-life.com
    • Secure,安全性,指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议既可访问,如果设置了Secure(没有值),则只有当使用https协议连接时cookie才可以被页面访问
      注意:Cookie安全机制要求站点页面只能访问本站点的Cookie,不能访问其它站点的Cookie。同时,最好在设置Cookie时使用encodeURI对象进行URI编码,在取出Cookie时再使用decodeURI对其进行解码!

    设置一个完整Cookie示例

    1. expires.setMonth(expires.getMonth()+1);//一个月后Cookie失效
    2. document.cookie = "userName="+encodeURI("用户名")+"; expires="+ expires.toGMTString()+"; path=/; domain=x-life.com; secure";

    每次设置document.cookie值时如果该Cookie名称并不存在,则新增一个Cookie,如果已经存在,则修改以前的值!

    setCookie函数

    1. function setCookie(name,value,expires,domain,secure) { var str = name+"="+encodeURI(value);//不要忘了在对应getCookie函数里面加上decodeURI方法
    2. if (expires) {
    3. } if (path) {
    4. str += "; path="+path;
    5. } if (domain) {
    6. } if (secure) {
    7. str += "; secure";
    8. }
    9. document.cookie = str;
    10. }

    没有删除Cookie的直接的方法,但可以变通一下来删除Cookie!

    1. function delCookie(cookieName) { var expires = new Date();
    2. expires.setTime(expires.getTime()-1);//将expires设为一个过去的日期,浏览器会自动删除它
    3. document.cookie = cookieName+"=; expires="+expires.toGMTString();