express学习(三)—— cookie和session

 cookie存在浏览器中,最大只能保存4K数据,不安全

 session存在服务器中,不能独立(先读取cookie再读取session),较安全

cookie

工具

发送cookie:

基本的东西先写好:

const express = require('express');

var server=express();

// cookie
server.use('/',function(req,res){
res.cookie('名字', '值', {path: '/aaa/a.html', maxAge: 30*24*3600*1000}); //path指明谁可以访问,‘/aaa/a.html'表示根目录下aaa文件夹中的a.html文件;maxAge表示最长保留时间(以毫秒计)
}) server.listen(8080)

读取cookie

接着,用cookie-parser工具

const express=require('express');
const cookieParser=require('cookie-parser'); var server=express(); //cookie
server.use(cookieParser()); server.use('/', function (req, res){
console.log(req.cookies); res.send('ok');
}); server.listen(8080);

执行结果:

但是cookie分为两种,加密的(有签名的)、不加密的(没有签名的)。

const express=require('express');
const cookieParser=require('cookie-parser'); var server=express(); //cookie
server.use(cookieParser('wesdfw4r34tf')); server.use('/', function (req, res){
req.secret = 'wesdfw4r34tf'; //有了上面的’server.use(cookieParser('wesdfw4r34tf'));‘,这里的req.secret可以不写。因为cookie会自动传值给secret
res.cookie('user', 'blue', {signed: true}); console.log('签名cookie:', req.signedCookies,'\n')
console.log('无签名cookie:', req.cookies); res.send('ok');
}); server.listen(8080);

执行结果:

一定要把签名的内容告诉cookieParser,如server.use(cookieParser('wesdfw4r34tf'));,否则它不知道解读谁,就会返回很长一串,如图所示的结果:

删除cookie

一条语句就足够

res.clearCookie('名字');

session

用到一个中间件:cookie-session:

npm install cookie-session --save

const express=require('express');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session'); var server = express(); server.use(cookieParser());
server.use(cookieSession({
name:'my_session',
keys:['aaa','bbb','ccc'], //数组越长越安全
maxAge:2*3600*1000 // 保存两小时
})); server.use('/',function(req,res){
if(req.session['count']==null){
req.session['count']=1;
}else{
req.session['count']+=1;
}
console.log(req.session['count']) res.send('ok');
}) server.listen(8080);

把密钥数组增大:

var arr=[];
for(var i=0;i<100000;i++){
arr.push('sig_'+Math.random());
} server.use(cookieParser());
server.use(cookieSession({
name:'my_session',
keys:arr, //用到上面的数组
maxAge:2*3600*1000 // 保存两小时
}));

总结

server.use(cookieParser('签名字符串'));
server.use(cookieSession({ })); server.use(function (req, res){
//发送cookie
res.cookie(名字, 值, {signed: true}); //读取cookie
res.cookies['user'] //删除cookie
res.clearCookie('名字'); //获取session
res.session['xxx']
//删除session
delete res.session['xxx'];
});

为什么delete不可以删除cookie?

因为cookie存在浏览器端,而session是存在服务器端,所以只有session才可以使用delete方法删除。

express学习(三)—— cookie和session的更多相关文章

  1. node学习之cookie和session

    c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏 ...

  2. Django学习之Cookie和Session

    一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...

  3. nodeJs学习-08 cookie、session

    http-无状态的:两次访问之间,无区别,cookie可解决 cookie:在浏览器保存一些数据,每次请求都会带过来: 弊端:可以查看修改,并不安全.大小有限(4K) 读取--cookie-parse ...

  4. Django 学习之cookie与session

    一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  5. PHP学习10——Cookie和Session技术

    主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原 ...

  6. java学习之Cookie与Session

    0x00前言 1.会话:一次会话中包含了多次请求和响应 2.功能:一次会话的范围内的多次请求间,共享数据 3.方式: (1)客户端会话技术:cookie (2)服务端会话技术:Session 0x01 ...

  7. Django框架(十):视图(三) Cookie、Session

    1. Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookie最早是网景公司的前雇员L ...

  8. cookie、session、token的区别

    一.  cookie 1.什么是cookie? Cookie 技术产生源于 HTTP 协议在互联网上的急速发展.随着互联网时代的策马奔腾,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服 ...

  9. Python学习(三十六)—— Cookie、Session和自定义分页

    一.Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR ...

随机推荐

  1. VM及centOS系统安装

    虚拟机安装linux及配置

  2. IE浏览器URL中文传参,后端接收是乱码问题处理

    这个问题还是因为IE浏览器是国外产品,人家交流的主要语言是英语,中文不识别. 直接上代码,亲测无误. //判断是否是IE浏览器 function isIE() { var userAgent = na ...

  3. Flume - Kafka日志平台整合

    1. Flume介绍 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供 ...

  4. docker学习系列(五):使用docker创建集成服务--lnmp

    在掌握了docker的基本命令之后,我也是想着去用docker做一点实际的配套环境,就拿自己最常用的lnmp环境来做测试.配套环境运行的顺序依次是mysql->php->nginx,至于为 ...

  5. linux下安装软件

    业界的软件标准安装有三步:configure,make,make install,下面是它们的定义: ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不 ...

  6. 微软Skype Linux客户端全新发布

    前两天,微软说要给“Linux 用户带来一个令人兴奋的新闻”,今天,这个新闻来了.它刚刚为 Linux 发布了一个新的 Skype 客户端. 此次发布,微软为 Linux 带来的 Skype 客户端与 ...

  7. 快速理解web语义化

    什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...

  8. Java I/O 总结

    Java I/O的的架构使用了装饰器的模式,我们在使用流的时候需要新建很多的装饰器对象,对源数据进行层层包装.各个包装类名以及它们的应用场景比较多,初学的时候难以摸清规律,这里我把它们归一下类,方便大 ...

  9. iOS之内存管理(ARC)

    iOS的内存管理,相信大家都不陌生,之前是使用的MRC,由开发人员手动来管理内存,后来使用了ARC,来由系统管理内存.本文主要讲讲Autorelease,Core Foundation对象在内存管理方 ...

  10. Java多线程:Automic包原理

    http://blog.csdn.net/zhangerqing/article/details/43057799 https://www.cnblogs.com/dengzz/p/5688021.h ...