1、Cookie

HTTP是无状态协议。例:打开一个域名的首页,进而打开该域名的其他页面,服务器无法识别访问者。即同一浏览器访问同一网站,每次访问都没有任何关系。

Cookie的原理是:客户端浏览器在第一次访问服务器后,服务器返回一段json数据进行标识,此后当客户端浏览器再次访问同一个域时,每次都携带此cookie信息。

特点

  • cookie是不加密的,用户可以自由看到;
  • 用户可以删除cookie,或者禁用它,未设置失效时间,则默认关闭浏览器后失效
  • cookie可以被篡改
  • cookie可以用于攻击
  • cookie存储量很小。(小于4k)

Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

cookie在Node.js中使用:

 1 const cookieParser = require('cookie-parser');     //模块  cookie-parser
2 const app = express();
3 app.use(cookieParser()); //中间件
4 app.get('/',(req,res)=>{
5 res.send('根路由');
6 })
7 app.get('/login',(req,res)=>{
8 //获取客户端cookies
9 console.log(req.cookies);
10
11 //服务器下发cookie
12 res.cookie('heaven','666',{
13 maxAge:900000 //有效时间,毫秒
14 });
15 res.send('ok');
16 })
17
18 app.listen(3000);

2、Session

服务器需要记录用户的状态,依赖cookie跟踪session,第一次创建session时,服务端会在HTTP协议中告诉客户端,需要在cookie里面记录一个session ID,以后客户端每次请求携带此session ID,服务器就能识别客户端。

特点

  • Session不是一个天生就有的技术,而是依赖cookie。当一个浏览器禁用cookie的时候,登录效果消失;或者用户清除了这个cookie,登录也消失;
  • session比cookie不一样在哪里呢?session下发的是乱码,并且服务器自己缓存一些东西;下次浏览器带着乱码上来,此时与缓存的乱码进行比较与识别。
session在Node.js中使用
/*
session 数据存放在服务端,但索引存放在浏览器,浏览器是根据cookieid识别对应的session
npm i express-session -S 使用session模块
*/
const express = require('express');
const session = require('express-session'); // 解析session的模块 express-session
const app = express(); //启动session的中间件,公式
app.use(session({ //要求客户端设置一个加密的cookie
secret:'heaven', //任意字符都行,给cookie加密
cookie:{maxAge:300000},
resave:true,
saveUninitialized:true,
}))
//中间件是按先后顺序执行的,所以放在前面拦截
app.get('/favicon.ico',(req,res)=>{
return;
}) app.get('/',(req,res)=>{
res.send('你的足迹是'+req.session.lvyou);
})
app.get('/:city',(req,res)=>{
let city = req.params.city;
// console.log(req.session);
let cityArr = req.session.lvyou || [];
cityArr.push(city);
req.session.lvyou = cityArr;
res.send("你今天去了"+city);
}) app.listen(3000);
/*
将session从内存中提取到mongo数据库内
npm i connect-mongo -S 将session存入mongo数据库的模块
*/
const express = require("express"),
app = express(),
session = require("express-session"),
Mongosession = require("connect-mongo")(session),
mongoose = require("mongoose");
//连接数据库
mongoose.connect("mongodb://localhost/bounty",{useNewUrlParser: true})
//session公式
app.use(session({
secret:"doukeyi", //秘钥,加密
rolling:true, //每次交互(操作页面,a标签,ajax)重新设定时间
cookie:{maxAge:1000*60*60}, //cookie有效期 1小时
resave:false, //是否每次请求都重新保存数据
saveUninitialized:false, //是否默认设置初始值
store:new Mongosession({
url:"mongodb://localhost/bounty" //session存入数据库,到期后自动清除数据库
})
}))
/*
清除session
*/
router.get("/logout",function (req,res) {
req.session.destroy();
res.redirect("/login");
})

3、区别

  • cookie是明码;session是乱码;我们可以轻松访问cookie值但是我们无法轻松访问session会话值,因此后者更安全
  • cookie存在客户端浏览器; session存在服务器;
  • cookie内存小,只允许4KB;session内存大;

Node中的Cookie和Session的更多相关文章

  1. 第74节:Java中的Cookie和Session

    第74节:第74节:Java中的Cookie和Session ServletContext: 什么是ServletContext,有什么用哦,怎么用呢? 启动服务器后,会给每个应用程序创建一个Serv ...

  2. Flask中使用cookie和session

    Flask中使用cookie和session 设置cookie from flask import Flask,Response app = Flask(__name__) @app.route('/ ...

  3. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  4. django系列7.2--django中的cookie和session基本操作,浏览器登陆验证的不同实现

    django中的cookie和session(02)–操作 一.Django中的cookie操作 ctrl + shift + del 是谷歌浏览器中清除页面缓存和cookie的快捷键 1.设置coo ...

  5. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  6. Django---Django中使用COOKIE和SESSION

    Django---Django中使用COOKIE和SESSION 一丶Cookie cookie的由来 # HTTP协议是无状态的. # 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请 ...

  7. node学习之cookie和session

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

  8. node中的cookie

    为什么需要cookie 我们知道http是无状态的协议,无状态是什么意思呢?我来举一个小例子来说明:比如小明在网上购物,他浏览了多个页面,购买了一些物品,这些请求在多次连接中完成,如果不借助额外的手段 ...

  9. Servlet中的cookie和session

    保存数据的2中方式 Cookie Session Cookie 我们可以将一些信息保存到cookie中,cookie存放在对应的浏览器目录里面.每个站点可以保存20个cookie,最大长度不超过4k. ...

随机推荐

  1. mysql02---客户端与服务器模型

    目录 一.客户端与服务器模型 连接MySQL方式 总结: 二.MySQL服务器构成 三.MySQL的结构 一.客户端与服务器模型 1.mysql是一个典型的C/S服务结构 1.1 mysql自带的客户 ...

  2. (解决某些疑难杂症)Ubuntu16.04 + NVIDIA显卡驱动 + cuda10 + cudnn 安装教程

    一.NVIDIA显卡驱动 打开终端,输入: sudo nautilus 在新打开的文件夹中,进入以下路径(不要用命令行): 左下角点计算机,lib,modules 这时会有几个文件夹,对每个文件夹都进 ...

  3. Oracle 存储过程--01

    1.简单的例子 /* 1.求圆的面积 */ create or replace procedure proc_1 is pi constant number(9,7):=3.1415927; radi ...

  4. apt-get update 101错误解决办法

    在一次装好Ubuntu系统, 执行 sudo apt-get update 时,报了错 " W: Failed to fetch http://security.ubuntu.com/ubu ...

  5. 给mysql一百万条数据的表添加索引

    直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表:故放弃该办法,最终解决办法如下: 一.打开mysql 命令行客户端 这里我们那可以看到导出的数据文件所存放 ...

  6. 一次Linux服务器空间满的随笔解决记录

    昨天突然无法上传文件到服务器上的,FTP工具总是到99%就卡住了.查了一下说可能是服务器满了. 赶紧用 df -h 命令查看空间使用情况.果然100%了. 想想上次查询才不到50%,怎么突然就满了了呢 ...

  7. springboot redis操作

    redis五大类型用法 Redis五大类型:字符串(String).哈希/散列/字典(Hash).列表(List).集合(Set).有序集合(sorted set)五种Controller:@Reso ...

  8. Vue.js----更换头像不实时更新问题

    原因 导致问题的原因是缓存造成的,因为你图片变了但是读取头像的地址还会没有变化的 解决思路 所以解决的思路就是上传之后让图片地址改变,那么我们就可以在上传的时候给地址加上一个时间戳那么久可一达到目的了 ...

  9. yii2.0增删改查实例讲解

    yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...

  10. SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法

    SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备 ...