cookie和session

cookie和session有很多相似的作用,session主要用于服务器端用来保存会话,同时也是基于cookie来实现的。本文主要是谈下对cookie的使用。

cookie是document下面的一个属性,所有操作cookie是通过document.cookie。

一、cookie的简单操作(增删改查)

1、写入一个cookie

cookie是key,value的形式存在本地磁盘或者内存中的。

// cookie写入一个key为userId,value为828的值
document.cookie="userId=828"; 
// cookie写入多个值可以使用分号加空格(; )隔开
document.cookie="userId=828; userName=hulk"; 

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

// escape
document.cookie="str="+escape("I love ajax");
// unescape

2、查询一个cookie

// 将所有的cookie都查询出来
var strCookie = document.cookie; 

3、修改一个cookie

修改一个cookie直接写入一个key相同value不同的值即可

// 先写入一个cookie
document.cookie="userId=828"; 
// 修改一个cookie
document.cookie="userId=888";

 4、删除cookie

为cookie设置一个过去的时间作为过期时间可以删除cookie 

//获取当前时间 
var date=new Date(); 
//将date设置为过去的时间 
date.setTime(date.getTime()-10000); 
//将userId这个cookie删除 
document.cookie="userId=828; expires="+date.toGMTString(); 

简单的封装方法

// 添加一个cookie:addCookie(name,value,expiresHours) 
// 该函数接收3个参数:cookie名称,cookie值,以及在多少小时后过期。这里约定expiresHours为0时不设定过期时间,即当浏览器关闭时cookie自动消失。该函数实现如下:
function addCookie(name,value,expiresHours){ 
    var cookieString=name+"="+escape(value); 
    //判断是否设置过期时间 
    if(expiresHours>0){ 
        var date=new Date(); 
        date.setTime(date.getTime+expiresHours*3600*1000); 
        cookieString=cookieString+"; expires="+date.toGMTString(); 
    } 
    document.cookie=cookieString; 
} 

// 获取指定名称的cookie值:getCookie(name) 
// 该函数返回名称为name的cookie值,如果不存在则返回空,其实现如下:
function getCookie(name){ 
    var strCookie=document.cookie; 
    var arrCookie=strCookie.split("; "); 
    for(var i=0;i<arrCookie.length;i++){ 
        var arr=arrCookie[i].split("="); 
        if(arr[0]==name)return arr[1]; 
    } 
    return ""; 
} 

// 删除指定名称的cookie:deleteCookie(name) 
function deleteCookie(name){ 
    var date=new Date(); 
    date.setTime(date.getTime()-10000); 
    document.cookie=name+"=v; expires="+date.toGMTString(); 
} 

二、cookie的属性

一个完整的cookie有以下几个属性:key,value,expires,path,domain。key和value不用多解释。

expires:过期时间,当不设置过期时间时,cookie会存在内存中,当会话消失即浏览器关闭时cookie是消失。设置了过期时间,cookie会存放在本地磁盘中。

max-age:cookie的失效间隔(),优先级高于expires

document.cookie = "name=hezebing;max-age=60";更改或新增cookie,并设置1分钟的有效期

domain:域,不设置域的时候,cookie取值只能在文档对应的域名下可以取到,其他的域下取不到该cookie,例如www.google.com和gmail.google.com就是两个不同的主机名一个主机中创建的cookie在另一个主机下是不能被访问的。如果设置了domain属性就可以实现跨域访问。

// 所有google.com下的主机都可以访问该cookie。 
document.cookie="name=value;domain=.google.com"; 

注意:顶级域名相同才可以通过设置domain实现跨域访问。

path:可访问cookie的路径 ,默 认情况下,如果在某个页面创建了一个cookie,那么该页面所在目录中的其他页面也可以访问该cookie。如果这个目录下还有子目录,则在子目录中也 可以访问。例如在www.xxxx.com/html/a.html中所创建的cookie,可以被www.xxxx.com/html/b.html或 www.xxx.com/ html/ some/c.html所访问,但不能被www.xxxx.com/d.html访问。为了控制cookie可以访问的目录,需要使用path参数设置cookie,语法如下:

// 其中cookieDir表示可访问cookie的目录
document.cookie="name=value; path=cookieDir"; 
// 就表示当前cookie仅能在shop目录下使用。
document.cookie="userId=320; path=/shop";
// 如果要使cookie在整个网站下可用,可以将cookie_dir指定为根目录
document.cookie="userId=320; path=/";

三、cookie的应用场景以及缺陷

应用:

(1)保存用户登录状态,跟踪用户的行为

缺陷:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值