nodejs cookie与session

cookie、session

cookie:在浏览器保存一些数据,每次请求都会带过来
*不安全、有限(4K)

session:保存数据,保存在服务端
*安全、无限

--------------------------------------------------------------------------------------------------------------

session:基于cookie实现的
*cookie中会有一个session的ID,服务器利用sessionid找到session文件、读取、写入

隐患:session劫持

cookie:

1.cookie空间非常小——省着用

2.安全性非常差——校验cookie是否被篡改过

用法:

a.发送cookie

res.secret=‘字符串‘;  //秘钥,对cookie加密
res.cookie(名字, 值, {path: ‘/‘, maxAge: 毫秒, signed: true});// path:路径,maxAge:过期时间,signed:是否加密

b.读取cookie

cookie-parser中间件
server.use(cookieParser(‘秘钥‘));
server.use(function (){
  req.cookies    未签名版
  req.signedCookies    签名版
});

c.删除cookie

res.clearCookie(名字);

举例:

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‘;
  res.cookie(‘user‘, ‘blue‘, {signed: true});

  console.log(‘签名cookie:‘, req.signedCookies)
  console.log(‘无签名cookie:‘, req.cookies);
 //res.clearCookie(‘user‘);
res.send(‘ok‘); }); server.listen(8080);

session:

cookie-session中间件

cookieSession(options)

name

要设置的Cookie的名称,默认为session

keys

用于签署和验证Cookie值的键列表。

secret

如果keys没有提供,将用该字符串做标记。

Cookie Options

其他选项传递给 cookies.get() 和 cookies.set() ,允许你控制secure、path、domain,并签署其他设置。

这些选项还可以包含以下任何内容(有关完整列表,请参阅 cookies模块文档

  • maxAge:表示Date.now()到期的毫秒数
  • expiresDate指示Cookie过期日期的对象(默认情况下在会话结束时过期)。
  • path:指示cookie路径的字符串(/默认情况下)。
  • domain:表示cookie的域的字符串(无默认)。
  • sameSite:一个布尔值或字符串,指示cookie是否为“相同站点”cookie(false默认情况下)。这可以设置为‘strict‘,,‘lax‘true(映射到‘strict‘)。
  • secure:一个布尔值,指示cookie是否仅通过HTTPS发送(false默认为HTTP true默认情况下为HTTPS)。如果这样设置,true并且Node.js不是直接通过TLS连接,请务必阅读如何在代理之后设置Express,否则Cookie可能无法正确设置。
  • httpOnly:一个布尔值,表示cookie是否仅通过HTTP(S)发送,并且不提供给客户端JavaScript(true默认情况下)。
  • signed:一个布尔值,表示cookie是否要被签名(true默认情况下)。如果是这样的话,.sig还会发送一个带附加后缀的同名的另一个cookie ,一个27字节的url-safe base64 SHA1值代表第一个Keygrip键的cookie-name = cookie-value的哈希。此签名密钥用于在下次接收到Cookie时检测篡改。
  • overwrite:一个布尔值,表示是否覆盖以前设置的相同名称的cookie(true默认情况下)。如果这是真的,在设置此Cookie时,将在同一请求中设置相同名称的所有Cookie(不管路径或域)是否从Set-Cookie头部中过滤掉
 

1.写入

server.use(cookieParser());
server.use(cookieSession({
  keys: [.., .., .., ..]
}));

2.读取

server.use(‘/‘, function (){
  req.session
});

2.删除

delete req.sessionreq.session = null

举例:

const express=require(‘express‘);
const cookieParser=require(‘cookie-parser‘);
const cookieSession=require(‘cookie-session‘);

var server=express();

//cookie
server.use(cookieParser());
server.use(cookieSession({
  name: ‘sess‘,
  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‘]++;
  }

  console.log(req.session);

  res.send(‘ok‘);
});

server.listen(8080);

--------------------------------------------------------------------------------------------------------------

时间: 2024-10-07 12:43:27

nodejs cookie与session的相关文章

nodejs中cookie、session的使用

因为http会话的无状态性,为了标记用户的登录状态,便出现了cookie.cookie分为很多种,有普通cookie.签名cookie.json cookie等,这里主要记录下在express应用中如何配置使用cookie及session. cookie 首先是app.js中的配置: ... var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); ... app.use(cooki

nodeJS中的Cookie和Session

Cookie ● HTTP是无状态协议.简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到,这是同一个浏览器在访问同一个网站.每一次的访问,都是没有任何关系的. 那么世界就乱套了,比如我上一次访问,登陆了,下一次访问,又让我登陆,不存在登陆这事儿了. ● Cookie是一个简单到爆的想法:当访问一个页面的时候,服务器在下行HTTP报文中,命令浏览器存储一个字符串:浏览器再访问同一个域的时候,将把这个字符串携带到上行HTTP请求中. 第一次访问一个服务器,不可能携带co

Cookie , Session ,Session 劫持简单总结

cookie 机制: Cookies 是 服务器 在 本地机器 上存储的 小段文本,并伴随着 每一个请求,发送到 同一台 服务器. 网络服务器 用 HTTP头 向客户端发送 Cookies.在客户端,浏览器解析这些 cookies 并将它们保存成为一个本地文件,他会自动将同一台服务器的任何请求附上这些 cookies. 因为 HTTP 是一种无状态的协议,而cookie机制采用的是在客户端保持状态的方案,session 是在服务端保持状态的协议.Cookies是在用户端的会话状态的存贮机制,他需

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

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

cookie和session得区别

1.cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据. 2.session其实指的就是访问者从到达某个特定主页到离开为止的那段时间. Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了. 注:为这个用户创建的Cookie的名称是aspsessionid.这个Cookie的唯一目的就是为每一个用

学习日常笔记<day11>cookie及session

1.会话管理 1.1会话管理定义 会话管理:管理浏览器客户端和服务端之间的会话过程中产生的会话数据 域对象:实现资源之间的数据共享 request 域对象 context 域对象 1.2.会话技术 Cookie技术:会话数据保存在浏览器客户端中 Session技术:会话数据保存在服务器端 2.Cookie技术 2.1 特点 Session技术:会话数据保存在服务器端 2.2Cookie技术核心 Cookie类:用于存储会话数据 1)构造Cookie对象 Cookie(java.lang.Stri

Cookie和Session

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向

Django进阶(路由系统、中间件、缓存、Cookie和Session

路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage), url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), 2.根据app对路由规则进行一次分类 rl(r'^web/',include('web.urls')), 1.每个路由规则对应

cookie、session、sessionid 与jsessionid

cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场景来帮你理解. 我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种方案: 1. 凭借柜台职员的记忆:由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速知道顾客当前的存款以及存取的次数,每次存取的金额是多少.---- 这种方式表示协议本身支持状态. 2. 使用存折的方式:职员把每个顾客的存款/取款的信息保存在存折上,然后交给顾