session的简介

session是另一种记录客户状态的机制,与cookie不同的是 session数据保存在服务器中,而不是保存在客户端浏览器中

session的用途  

  • session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存在服务器端。
  • 当用户访问站点的其他页面时,可以根据用户的登录状态做出相应的提示,身份验证拦截。
  • session可以和数据库结合做持久化操作,当服务器挂掉时,不会导致用户信息丢失。、

session的工作流程

  (例子:商场自助存包)

  1. 当客户端第一次请求服务器时,服务器会为每个客户端创建一个独享的session对象,用于跟踪用户的状态。
  2. 同时,为session对象分配一个唯一标识sessionId。
  3. 为了管理session对象,以sessionId为键,以session对象为值,封装成Map集合。
  4. 响应客户端时,将sessionId以cookie的形式发送给客户端,存放在客户端浏览器的缓存中。
  5. 当客户端再次请求服务器时,会将sessionId以cookie请求头的方式发送给服务器,服务器得到sessionId后,从Map集合中,得到session对象,从而跟踪状态

session的特点

  • 同源的页面之间可以共享session数据
  • 浏览器关闭时,服务器中保存的session对象也会跟着销毁
  • 在第一次调用request.getSession()方法时,创建出session,
  • 超时:session超过一定时间(默认30分钟,这个时间可设置)没有人使用,则认为超时,干掉这个session。
  • 自杀:也可以明确的调用session的invalidate()方法,手动的杀死session。
  • 意外身亡:或者当服务器非正常关闭时,服务器中的session跟着消亡。

session的基本使用

1、安装express-sesssion

npm install express-session --save-prod

2、导入

const session = require('express-session');

3、配置中间件

 // 配置中间件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
// cookie: { secure: true } // https 协议的请求才会传入 cookie }))

4、设置session数据

 app.get('/login', (req, res) => {

   req.session.userinfo = 'zhangsan';
res.send('登录成功');
})

5、获取session数据

 app.get('/', (req, res) => {
if (req.session.userinfo) {
res.send('欢迎回来' + req.session.userinfo)
} else {
res.send('未登录')
}
})

案例:

 // 导入express
const express = require('express');
// 导入session中间件
const session = require('express-session');
const app = express(); app.use(session({secret:'123',resave:false,name:'heihie',
saveUninitialized:true
}))
// 主页
app.get('/',(req,res)=>{
// console.log(req.session)
if(req.session.uname){
res.send('欢迎回来'+req.session.uname)
}else{
res.send('你还未登录')
}
})
// 登录
app.get('/doLogin',(req,res)=>{
//用户名和密码正确正确
if(req.query.username=='zzj'&& req.query.password=="0803"){
// 将用户信息保存到session中
req.session.uname=req.query.username;
// req.session.password=req.query.password;
res.send('登录成功')
}
})
// 启动服务器并监听端口
app.listen(3000,()=>{
console.log('serve running at http://localhost:3000')
})

session的配置参数

参数

说明

secret

字符串,作为服务端生成session的签名

name

返回客户端的cookie的名称,默认为content.sid,也可以自己设置

resave

强制重新保存session,即使它没有变化,默认为true,建议设置成false

saveUninitialized

强制将未初始化的session存储,默认是true,建议设置成true

cookie

关于cookie配置信息

rolling

在每次请求时强行设置cookie,这将重置cookie过期时间,默认值为false

session --中间件的更多相关文章

  1. Django-F,Q查询,Templatetags,session,中间件

    内容总览1.ORM的多对多的使用 1>语法与实例   2>聚合与分组   3>F与Q查询   4>事务2.模板之自定义 1>初始化 2>filter 3>si ...

  2. django 2 ORM操作 ORM进阶 cookie和session 中间件

    ORM操作 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  3. ASP.NET Core中间件实现分布式 Session

    1. ASP.NET Core中间件详解 1.1. 中间件原理 1.1.1. 什么是中间件 1.1.2. 中间件执行过程 1.1.3. 中间件的配置 1.2. 依赖注入中间件 1.3. Cookies ...

  4. python-django中间件session源码

    settings.py MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', ] 1. 看看SessionMid ...

  5. node的express中间件之session

    虽然session与cookie是分开保存的.但是session中的数据经过加密处理后默认保存在一个cookie中.因此在使用session中间件之前必须使用cookieParser中间件. app. ...

  6. ASP.NET Core中间件实现分布式 Session(转载)

    ASP.NET Core中间件实现分布式 Session 1. ASP.NET Core中间件详解 1.1. 中间件原理 1.1.1. 什么是中间件 1.1.2. 中间件执行过程 1.1.3. 中间件 ...

  7. 在 ASP.NET CORE 中使用 SESSION

    Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...

  8. 我心中的核心组件(可插拔的AOP)~分布式Session组件

    回到目录 对于目前的网站来说,为了满足高可用,高并发,高负载,一台WEB服务器已经远远不够用了,以后的WEB应用服务器应该是一种集群的环境,它们之间使用一些工具进行数据的同步,在由1台变成多台服务器时 ...

  9. 2.实现Express中间件

    Express提供的大部分功能都是通过中间件函数完成,这些中间件函数在Node.js收到 请求的时点 和 发送响应的时点 执行 connect模块提供了中间件框剪 方便在全局或路径级别或为单个路由插入 ...

随机推荐

  1. vue & nodejs jwt 的基于token身份验证

    现在比较流行的验证方式,是带着token的登录验证 原理 1. 登陆时,客户端发送用户名密码 2. 服务端验证用户名密码是否正确,校验通过就会生成一个有时效的token串,发送给客户端 3. 客户端储 ...

  2. 扫描枪连接zebra打印机打印条码标签无需电脑

    在一些流水线生产的现场,需要及时打印条码标签,由于现场环境和空间限制,无法摆放电脑或者通过连接电脑来打印条码标签的速度太慢, 瑞科条码特提供了一套扫描枪直接连接条码打印机,扫描枪扫描条码之后直接打印输 ...

  3. iOS---OBJC_ASSOCIATION_ASSIGN可能引起的Crash

    //OBJC_ASSOCIATION_ASSIGN类似于我们常用的assign,assign策略的特点就是在对象释放以后,不会主动将应用的对象置为nil,这样会有访问僵尸对象导致应用崩溃的风险.为了解 ...

  4. rest.css解决不同浏览器元素默认样式不同的问题

    html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, ...

  5. linux vscode 编译配置

    linux 环境下,g++和clang都可以作为C++的编译器,我这里选择使用的是clang. 首先是插件选择: (1) C/C++ 微软自带的C/C++插件. (2) C/C++ Clang Com ...

  6. 14集超详细视频教程,手把手教你用数据神器Hawk!

    沙漠君在闭关4个月后,终于把开源数据神器Hawk(详细介绍在这里)的文档和教学视频基本录制完毕, 并同步更新在有爱无广告二次元的B站! 教程总时间超过3个小时,覆盖了网页采集器,数据清洗,文件读写等方 ...

  7. 50道Redis面试题史上最全,以后面试再也不怕问Redis了

    1.什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存. ...

  8. C++双指针滑动和利用Vector实现无重复字符的最长子串—力扣算法

    题目: 力扣原题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串, ...

  9. 5.Ansible Jinja2 模板

    1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的 jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? te ...

  10. 利用openssl自建CA体系

    使用 OpenSSL 创建私有 CA:1 根证书 使用 OpenSSL 创建私有 CA:2 中间证书 使用 OpenSSL 创建私有 CA:3 用户证书 今天跟着上面的三部曲,做了一下openssl的 ...