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()到期的毫秒数expires:Date指示Cookie过期日期的对象(默认情况下在会话结束时过期)。path:指示cookie路径的字符串(/默认情况下)。domain:表示cookie的域的字符串(无默认)。sameSite:一个布尔值或字符串,指示cookie是否为“相同站点”cookie(false默认情况下)。这可以设置为'strict',,'lax'或true(映射到'strict')。secure:一个布尔值,指示cookie是否仅通过HTTPS发送(false默认为HTTPtrue默认情况下为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.session
req.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);
--------------------------------------------------------------------------------------------------------------
nodejs cookie与session的更多相关文章
- nodeJS之Cookie和Session(一)
nodeJS之Cookie和Session(一) 一:Cookie HTTP是一个无状态协议,客户端每次发出请求时候,下一次请求得不到上一次请求的数据,那么如何将上一次请求和下一次请求的数据关联起 ...
- nodejs中cookie、session的使用
因为http会话的无状态性,为了标记用户的登录状态,便出现了cookie.cookie分为很多种,有普通cookie.签名cookie.json cookie等,这里主要记录下在express应用中如 ...
- nodeJs学习-08 cookie、session
http-无状态的:两次访问之间,无区别,cookie可解决 cookie:在浏览器保存一些数据,每次请求都会带过来: 弊端:可以查看修改,并不安全.大小有限(4K) 读取--cookie-parse ...
- Nodejs之使用session
nodejs中使用session的说明. session介绍 为什么使用session: session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登陆信息保存. 当客户访问其他界面时,可 ...
- HTML5学习笔记(二十九):Cookie和Session
HTTP协议本身是无状态的,这和HTTP最初的设计是相符的,每次请求都是创建一个短连接,发送请求,得到数据后就关闭连接.即每次连接都是独立的一次连接. 这样的话,导致的问题就是当我在一个页面登陆了账号 ...
- Cookie , Session ,Session 劫持简单总结
cookie 机制: Cookies 是 服务器 在 本地机器 上存储的 小段文本,并伴随着 每一个请求,发送到 同一台 服务器. 网络服务器 用 HTTP头 向客户端发送 Cookies.在客户端, ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...
- Cookie和Session在Node.JS中的实践(三)
Cookie和Session在Node.JS中的实践(三) 前面作者写的COOKIE篇.SESSION篇,算是已经比较详细的说明了两者间的区别.机制.联系了.阅读时间可能稍长,因为作者本身作图也做了不 ...
- Cookie和Session的总结
1.开篇 在之前学习这一段的时候我一直有点没弄清楚,其实对Session这块的理解还可以,但是Cookie感觉始终还是欠缺点火候.之后的很长一段时间都基本上很少用Cookie了,渐渐的也淡忘了这一块的 ...
随机推荐
- Spring框架中<constructor-arg>与<property>理解
配置文件的根元素是beans,每个组件使用bean元素来定义,bean元素可以有许多属性,其中有两个是必须的:id和class.id表示组件的默认名称,class表示组件的类型. 依赖注入的方式: ...
- IOS菜鸟学习
1.NS是系统库.2.IOS类的声明:@interface MyObject : NSObject { int memberVar1; // 实体变量 id memberVar2;} + ...
- 微信小程序没有返回按钮怎么办?微信小程序左上角返回按钮怎么调出来?
如果你发现自己的小程序页面没有返回按钮,请检查是不是用的wx.redirectTo(OBJECT)进行的跳转,如果是那就把它改成wx.navigateTo(OBJECT)就可以了. wx.naviga ...
- Mysql索引最左匹配原则
先来看个例子: 1. 示例1:假设有如下的一张表: DROP TABLE IF EXISTS testTable; CREATE TABLE testTable ( ID BIGINT NOT NUL ...
- 吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection)
对于异常检测算法,使用特征是至关重要的,下面谈谈如何选择特征: 异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布,例如使用对数函数:
- [Swift]LeetCode213. 打家劫舍 II | House Robber II
You are a professional robber planning to rob houses along a street. Each house has a certain amount ...
- Java接口实现传参
package com.gezhi.interfaces;/** * 新建一个dog类实现接口livingable(狗吃和上厕所都是与生俱来的不应该写成接口) * @author square 凉 * ...
- python获取当前路径
python获取当前执行命令的路径: #!/usr/bin/env python # -*# coding: utf-8 -*- import os print os.getcwd() python获 ...
- Vim 复制粘帖格式错乱问题的解决办法
有时候,复制文本(尤其是代码)到 Vim,会出现格式错乱的问题.看样子,应该是自动缩进惹得祸.本文不去深究原因,直接给出解决方法. 1. paste 模式 运行如下命令,进入 paste 模式: :s ...
- EFCore合并多条迁移记录
方法来自 merge-migrations-in-entity-framework-core 更新数据库到最新结构 删除迁移目录下的所有迁移脚本 新建一个迁移 注释掉Up()和Down()方法中的代码 ...