浅谈cookie

这两天做了一个小的offer项目,然后遇到了一些问题,稍微总结一下,感触最深的是cookie,因为之前只是简单的听说过,这次是第一次正面相撞。。

  1. 先说一下场景,简单的offer项目,登录,退出,登录的时候,后端的接口会将token返回给我,然后退出的时候我自己将cookie消掉。

  2. 登录的时候自己将获取的cookie写入浏览器,并设置有效期。

  3. 简单的存取操作:在使用javascript存取cookie时,必须要使用Document对象的cookie属性;
    document.cookie = 'token=fdasfjsdkfljdjsfdlsjfsdkafjslkdasdjkfslkddsf'.
    以上代码中,token表示cookie的名称,后面的一长串是对象后台传过来的一长串的字符串。这样就是所说的种植上cookie了呢。。。

  4. 读取cookie的操作,实例是在登录后每次请求的时候都会在header里面将token带回去才会有权限访问。所以要读取到自己种下的cookie。
    function getCookie(c_name){
    if(document.cookie.length > 0){ //先查询cookie是否为空,为空就return ''
    c_start = document.cookie.indexOf(c_name + '=') //通过String对象的indexOf()来检查这个cookie是否存在,不存在就为-1
    if(c_start != -1){
    c_start = c_start + c_name.length+1 //最后的+1是为了匹配‘=’,其目的就是获得cookie的开始位置。
    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 ''
    }

  5. 设置cookie的有效期。。
    当我写退出的时候,就是想把存储的cookie进行消除,但是对于消除cookie还一点概念都没有,刚开始使用的是将cookie制空,但是发现这种方法是不正确的,在浏览器中始终存在cookie,不手动在浏览器中清除cookie就登录不进去。后来才知道,当设置浏览器的cookie失效时,浏览器会自动将实效的cookie清除掉。。
    cookie 的生命周期也就是有效期和失效期,即cookie的存在时间。在默认的情况下,cookie会在浏览器关闭的时候自动清除,但是我们cookie的有效期。语法如下
    document.cookie = 'name=value;expires=date'
    上面代码的date值为GMT(格林威治时间)格式的日期型字符串,生成方式如下:
    var _date = new Date( );
    _date.setDate(_date.getDate( )+30);
    _date.toGMTString( );
    上面三行代码分解为几步来看:

- 通过new生成一个Date的实例,得到当前的时间;
- getDate( )方法得到当前本地月份中的某一天,接着加上30就是我希望这个cookie能过在本地保存30天;
- 接着通过setDate( )方法来设置时间;
- 最后 用toGMTString( )方法来设置时间;

通过下面完整的函数来说明在创建cookie的过程中我们需要注意的地方。
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());
  }
  使用方法:setCookie('username','Darren',30)

在项目中使用到的设置cookie期限的代码:
var token = 'token=' + data.data.token
var exdate = new Date()
exdate.setDate(exdate.getDate()+1)
document.cookie = token+';expires='+exdate.toGMTString()
当点击退出时,调用的代码,设置其失效日期:
function logout(){
//通过设置cookie有效期失效来进行退出
var token = ""
if(document.cookie.length > 0){
var c_start = document.cookie.indexOf('token' + '=')
if(c_start != -1){
c_start = c_start + 'token'.length+1
var c_end = document.cookie.indexOf(';', c_start)
if(c_end == -1){
c_end = document.cookie.length
}
token = unescape(document.cookie.substring(c_start,c_end))
}
}
token = 'token=' + token
var exdate2 = new Date()
exdate2.setDate(exdate2.getDate() - 1)
document.cookie = token + ";path=/;expires="+exdate2.toGMTString()
window.location.href = "/login"
};

结尾附上一个不错的博客,http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 什么是 Cookie “cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就...
    恩德_b0c2阅读 396评论 0 3
  • cookie也叫HTTP Cookie,最初是客户端与服务器端进行会话使用的 document.cookie = ...
    碧玉含香阅读 394评论 0 1
  • 相关视频:v.qq.com/x/page/f0513vvyti4.html PPT:ptteng.github.i...
    林氏名义阅读 193评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139
  • 很多时候,我们会遇到突发事件,比如我今天突然接到任务,明天去保定出差,这次公司领导很重视。我知道纵使我百般不愿,也...
    翔子52双鱼阅读 155评论 0 1