Node中的Cookie和Session

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内存大;

原文地址:https://www.cnblogs.com/danew/p/11415672.html

时间: 2024-10-08 23:55:28

Node中的Cookie和Session的相关文章

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

本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息:比如用户信息.聊天历史记录.好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送. 作为IM系统中不可或缺的技术,Http短连的重要性无可替代,但Http作为传统互联网信

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

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

Flask中使用cookie和session

Flask中使用cookie和session 设置cookie from flask import Flask,Response app = Flask(__name__) @app.route('/index') def index(): response = Response("设置cookie") response.set_cookie('username','sfencs') return response if __name__ == '__main__': app.run(

Django中使用cookie和session

目录 Django中使用cookie与session 一.cookie 二.session Django中使用cookie与session 一.cookie cookie的由来:由于HTTP协议是无状态的,每次请求都是独立的请求,为了能够保存某些数据,cookie便产生了. 什么是cookie:cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对.下次访问服务器的时候,浏览器会自动携带这些键值对,以便服务器提取有用数据. cookie的原理:cookie的工作原理是:

node学习之cookie和session

c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏览器下一次发送请求时,会携带cookie. 而node.js 的框架express 因为保持高性能, 没有封装太多的功能,而是按需加载的形式, 引入自己需要的中间件.而cookie 常用的插件是cookie-parser 读取cookie: 需要借助cookie-parser. //引入cookie

网络中的cookie和session的区别

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能要借助于cookie机制来达到保存标识的目的,但也可以使用其他方法. cookie的内容包括:名字,值,过期时间,路径和域.路径和域一起构成了cookie的作用范围.如果不设置过期时间,则表示这个cookie的生命周期为浏览器的会话期间,关闭浏览器窗口,coo

理解会话中的Cookie和Session对象

会话可以简单理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 在java语言中,Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求,其中这个过程,保存会话中数据的两种重要技术: 1.Cookie技术: Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器,并保存在客户端浏览器的缓存中.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样,we

正确理解web交互中的cookie与session

cookie存储在客户端的纯文本文件 用户请求服务器脚本 脚本设置cookie内容 并 通过http-response发送cookie内容到客户端并保存在客户端本地 客户端再次发送http请求的时候会将本地的cookie内容添加到http请求头发送给服务器,服务器端脚本可以调用cookie内容 流程如图 cookie.php 脚本 客户端第一次访问(发送http请求)脚本设置cookie(setcookie)到客户端 并不会显示cookie内容 此时客户端的cookie文件已经生成 cookie

Django中的cookie与session

cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来自同一人的连续请求.上图很明显的展示了Django的session与cookie的实现原理.服务器会生成两份相同的cookie字符串,一份保存在本地,一份发向求情的浏览器.浏览器将收到的cookie字符串保存下来,当下次再请求时,会将这段cookie发送到服务器,服务器得到这段cookie会与本地保