express学习(三)—— cookie和session
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的更多相关文章
- node学习之cookie和session
c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏 ...
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- nodeJs学习-08 cookie、session
http-无状态的:两次访问之间,无区别,cookie可解决 cookie:在浏览器保存一些数据,每次请求都会带过来: 弊端:可以查看修改,并不安全.大小有限(4K) 读取--cookie-parse ...
- Django 学习之cookie与session
一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...
- PHP学习10——Cookie和Session技术
主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原 ...
- java学习之Cookie与Session
0x00前言 1.会话:一次会话中包含了多次请求和响应 2.功能:一次会话的范围内的多次请求间,共享数据 3.方式: (1)客户端会话技术:cookie (2)服务端会话技术:Session 0x01 ...
- Django框架(十):视图(三) Cookie、Session
1. Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookie最早是网景公司的前雇员L ...
- cookie、session、token的区别
一. cookie 1.什么是cookie? Cookie 技术产生源于 HTTP 协议在互联网上的急速发展.随着互联网时代的策马奔腾,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服 ...
- Python学习(三十六)—— Cookie、Session和自定义分页
一.Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR ...
随机推荐
- 序列化、反序列化(Serializable特性)
//需要被实例化的类 using System.Collections; using UnityEngine; [Serializable] public class SerializableClas ...
- Python3数据库模块(sqlite3,SQLite3)
一.sqlite命令 创建数据库:在控制台sqlite3 name .databases 查看数据库 .tables 查看表格名 databaseName .dump & ...
- linux(ubuntu)环境下安装及配置JDK
安装完IDEA之后遇到了问题,发现jdk安装完之后配置环境变量好困难,下面总结一下我的安装及配置方式: JDK下载链接:http://download.oracle.com/otn-pub/java/ ...
- 通向架构师的道路之 Tomcat 性能调优
一.总结前一天的学习 从"第三天"的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是: 吞吐量 Responsetime Cpuload MemoryUsage 我们也 ...
- Axis1.4之即时发布服务
下载axis1.4开发包,解压开发包,将webapps目录下的axis文件夹拷贝到tomcat的webapps目录下.启动tomcat,在浏览器输入http://localhost:8080/axis ...
- http.request请求及在node中post请求参数解析
Post请求 var http=require('http'); var qs=require('querystring'); var post_data={a:123,time:new Date() ...
- ImageLoader 笔记
BitmapFactory 我们不能够通过构造函数创建Bitmap对象.如果需要将图片转成Bitmap对象加载到内存中,就需要使用BitmapFactory类.BitmapFactory跟据图片数据源 ...
- 选择排序—简单选择排序(Simple Selection Sort)
基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...
- 源码实现 --> strdel
删除字符串中某个字符strdel 函数 char *strDel(char* str,const char chToDel) 不是库里面的函数,自己实现的原型,删除str中所有的chToDel字符. ...
- java开源安全框架-------Apache Shiro--第一天
1.1.简介 Apache Shiro 是Java的一个安全框架.目前使用Apache Shiro 的人越来越多,因为它相当简单,对比Spring Security,可能没有没有Spring Secu ...