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 ...
随机推荐
- 如约而至,Java 10 正式发布!
3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- 基于Jmeter的自动化测试实施方案设计
前言: Jmeter是目前最流行的一种测试工具,基于此工具我们搭建了一整套的自动化方案,包括了脚本添加配置.本地配置和运行.服务器配置等内容,完成了自动化测试闭环,通过这种快捷简便高效的方式,希望可以 ...
- Spring OAuth2 GitHub 自定义登录信息
# 原因 最近在做一款管理金钱的网站进行自娱自乐,发现没有安全控制岂不是大家都知道我的工资了(一脸黑线)? 最近公司也在搞 Spring OAuth2,当时我没有时间(其实那时候不想搞)就没做,现在回 ...
- 常用css样式颜色值: 64位真彩和256位值
1. background-color: #eee; 2. background-color: #797979; 3. background-color: #007aff; 继续更新中
- AngularJs的resource服务与Rest服务交互
前言以后补: * 在使用resource服务返回的资源对象后具有与后台数据交互的五大接口:save query delete remove get 五种默认行为: { "get": ...
- Http最常见的错误代码
1XX 表示消息 2XX 表示成功 3XX 表示重定向 4XX 表示请求错误 5XX 表示服务器端错误 我们最常见的就是: 404(页面找不到),这个错误代码是由于我们输入的网址不对造成的,浏览器找不 ...
- JAVAEE——BOS物流项目08:配置代理对象远程调用crm服务、查看定区中包含的分区、查看定区关联的客户
1 学习计划 1.定区关联客户 n 完善CRM服务中的客户查询方法 n 在BOS项目中配置代理对象远程调用crm服务 n 调整定区关联客户页面 n 实现定区关联客户 2.查看定区中包含的分区 n 页面 ...
- 【Django】模型层说明
[Django模型层] 之前大概介绍Django的文章居然写了两篇..这篇是重点关注了Django的模型层来进行学习. ■ 模型定义 众所周知,Django中的模型定义就是定义一个类,其基本结构是这样 ...
- Algorithm --> 投资组和求最大利润
投资组和求最大利润 题目: 投资人出资一笔费用mount,投资给不同的公司(A,B,C....),求最大获取利润? 例如:投资400百万,给出两家公司A和B: 1.如果投资一百万给A公司,投资3百万给 ...
- Sum of xor
Sum of xor jdoj-2160 题目大意:给你一个n,求1^2^...^n. 注释:$n<=10^{18}$. 想法:第一道异或的题.先来介绍一下什么是异或.a^b表示分别将两个数变成 ...