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. python 全栈开发,Day3(正式)

    一.基础数据类型 基础数据类型,有7种类型,存在即合理. 1.int 整数 主要是做运算的 .比如加减乘除,幂,取余  + - * / ** %...2.bool 布尔值 判断真假以及作为条件变量3. ...

  2. Ameba读写分离_mycat分库分表_redis缓存

    1 数据库的读写分离 1.1 Amoeba实现读写分离 1.1.1 定义 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy 优点: 配置读写分离时较为简单.配置 ...

  3. PHP之防御sql注入攻击的方式

    长期以来,web的安全性存在着巨大的争议与挑战.其中,sql注入就是一种常见的一种攻击方法,开发人员普遍的做法就是不停的过滤,转义参数,可是我们php大法天生弱类型的机制,总是让黑客有机可乘,绕过防御 ...

  4. ASP.NET MVC编程——验证、授权与安全

    1 验证  一般采用表单验证完成登陆验证,建议结合SSL使用.为限制控制器只能执行HTTPS,使用RequireHttpsAttribute 2 授权 对账户的权限的控制可以通过在控制器或控制器操作上 ...

  5. kvm之十二:虚拟机迁移

    虚拟机迁移该方式要确保虚拟机是关机状态.virsh shutdown snalevirsh dumpxml snale > /etc/libvirt/qemu/snale_qy.xml  // ...

  6. Java中的序列化与反序列化

    序列化定义 将对象转换为字节流保存起来,并在以后还原这个对象,这种机制叫做对象序列化. 将一个对象保存到永久存储设备上称为持久化. 一个对象要想能够实现序列化,必须实现java.io.Serializ ...

  7. New UWP Community Toolkit - Staggered panel

    概述 前面 New UWP Community Toolkit 文章中,我们对 2.2.0 版本的重要更新做了简单回顾,其中简单介绍了 Staggered panel,本篇我们结合代码详细讲解  St ...

  8. JSP、Servlet、JDBC学习笔记

    WEB的学习 * 服务器 * 网络的架构(面试题) * C/S client/server 客户端/服务器端 例子:QQ 快播 暴风影音 * 优点:交互性好,服务器压力小. * 缺点:客户端更新了,下 ...

  9. Struts2学习笔记四 OGNL

    OGNL,全称为Object-Graph Navigation Language(对象图表达语言),它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,调用java对象的方法,同时能够自动 ...

  10. java通过数据库连接池链接oracle

    开发工具:Eclipse J2EE 3.6 运行环境:jdk1.6 部署环境:Tomcat7 数据库连接池用的是dbcp,网上download下来的三个jar包. 把数据库连接池包和jdbc的包放到t ...