express框架中cookie的使用

cookie的工作原理

http是一种无状态协议,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。那个时候没有动态页面技术,只有纯粹的静态HTML页面,因此根本不需要协议能保持状态;

cookie是在RFC2109(已废弃,被RFC2965取代)里初次被描述的,每个客户端最多保持三百个cookie,每个域名下最多20个Cookie(实际上一般浏览器现在都比这个多,如Firefox是50个),而每个cookie的大小为最多4K,不过不同的浏览器都有各自的实现。对于cookie的使用,最重要的就是要控制cookie的大小,不要放入无用的信息,也不要放入过多信息。

无论使用何种服务端技术,只要发送回的HTTP响应中包含如下形式的头,则视为服务器要求设置一个cookie:

Set-cookie:name=name;expires=date;path=path;domain=domain

支持cookie的浏览器都会对此作出反应,即创建cookie文件并保存(也可能是内存cookie),用户以后在每次发出请求时,浏览器都要判断当前所有的cookie中有没有没失效(根据expires属性判断)并且匹配了path属性的cookie信息,如果有的话,会以下面的形式加入到请求头中发回服务端:

Cookie: name="zj"; Path="/linkage"

服务端的动态脚本会对其进行分析,并做出相应的处理,当然也可以选择直接忽略。

这里牵扯到一个规范(或协议)与实现的问题,简单来讲就是规范规定了做成什么样子,那么实现就必须依据规范来做,这样才能互相兼容,但是各个实现所使用的方式却不受约束,也可以在实现了规范的基础上超出规范,这就称之为扩展了。无论哪种浏览器,只要想提供cookie的功能,那就必须依照相应的RFC规范来实现。所以这里服务器只管发Set-cookie头域,这也是HTTP协议无状态性的一种体现。

需要注意的是,出于安全性的考虑,cookie可以被浏览器禁用。

//转载于http://www.cnblogs.com/chenchenluo/p/4197181.html

express直接提供了api,只需要在需要使用的地方调用如下api即可

function(req, res, next){
    ...
    res.cookie(name, value [, options]);
    ...
}

express就会将其填入Response Header中的Set-Cookie,达到在浏览器中设置cookie的作用。

name: 类型为String
value: 类型为String和Object,如果是Object会在cookie.serialize()之前自动调用JSON.stringify对其进行处理
Option: 类型为对象,可使用的属性如下
domain:cookie在什么域名下有效,类型为String,。默认为网站域名
expires: cookie过期时间,类型为Date。如果没有设置或者设置为0,那么该cookie只在这个这个session有效,即关闭浏览器后,这个cookie会被浏览器删除。
httpOnly: 只能被web server访问,类型Boolean,禁止客户端JavaScript的访问,禁止后不能使用document.cookie。
maxAge: 实现expires的功能,设置cookie过期的时间,类型为String,指明从现在开始,多少毫秒以后,cookie到期。
path: cookie在什么路径下有效,默认为’/’,类型为String
secure:只能被HTTPS使用,类型Boolean,默认为false
signed:使用签名,类型Boolean,默认为false。express会使用req.secret来完成签名,需要cookie-parser配合使用

下面一段代码用于设置cookie:

var express=require('express');
var cookie=require('cookie-parser'); 
var app=express();


app.use(cookie());

app.get('/',function(req,res){

   if(req.cookies.user){
       res.send('欢迎在次登录')
   }
    else{
       res.cookie('user',1,{ expires: new Date(Date.now() + 100), httpOnly: true });
       res.send('欢迎新用户登录')
   }
});

app.listen(8888);

这里写图片描述

我们注意到在第一次登录时,在请求的response头部会出现set-cookie。对应的在server.js中我们手动设置的cookie。

再打开浏览器查看此时的浏览器cookie。

这里写图片描述

再次刷新页面。

这里写图片描述

在请求的请求头中出现cookie,此时页面出现欢迎在次登录
这样一个简单的服务端设置cookie就搞定了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值