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. python 正则表达式re使用模块(match()、search()和compile())

    摘录 python核心编程 python的re模块允许多线程共享一个已编译的正则表达式对象,也支持命名子组.下表是常见的正则表达式属性: 函数/方法 描述 仅仅是re模块函数 compile(patt ...

  2. 设计模式之单例模式C#实现

    前言 单例模式是老生常谈的一种设计模式,同时它是最简单也是最容易被忽视的一种设计模式. 下面是一些个人看法: (1) 单例类需要保证自己的唯一性,同时也需要避免被继承,即需要使用sealed修饰: ( ...

  3. [Android逆向]APK反编译与回编译

    一.先查壳,再反编译看验证首先打开.apk文件==>反编译apk(dex/配置文件/资源文件(apk反编译失败)>修改关键文件实现自己的目的>重新打包签名(无法重新打包)==> ...

  4. Android 插件化开发(四):插件化实现方案

    在经过上面铺垫后,我们可以尝试整体实现一下插件化了.这里我们先介绍一下最简单的实现插件化的方案. 一.最简单的插件化实现方案 最简单的插件化实现方案,对四大组件都是适用的,技术面涉及如下: 1). 合 ...

  5. linux 系统账户 和 普通账户 的区别

    最近使用 useradd -r 选项进行创建账户,用于测试,对-r 选项不是很明白,下面记录一些调研的过程: -r, --system Create a system account. System ...

  6. Linux中环境变量相关文件的区别

    Linux下各种不同环境变量相关文件的作用: 1. /etc/environment  设置整个系统的环境,系统启动时,该文件被执行. 2. /etc/profile     设置所有用户的环境,当用 ...

  7. Linux - CentOS 7 通过Yum源安装 MySql 5.7

    添加MySQL Yum存储库 从官网下载最新的mysql源 官网地址:https://dev.mysql.com/downloads/repo/yum/ 选择并下载适用于平台的发行包. 然后,在Lin ...

  8. EtreCheck是否修复恶意软件和广告软件?为什么EtreCheck无法制作截图?

    EtreCheck for Mac是一款Mac上的软件,有很对人对这款软件并不熟系,今天小编就来给大家介绍一下这款软件最常出现的问题—EtreCheck是否修复恶意软件和广告软件?为什么EtreChe ...

  9. 静态方法staticmethod和类方法classmethod

    静态方法staticmethod和类方法classmethod 一.类方法classmethod 把一个方法变成一个类中的方法,这个方法可以直接利用类来调用,不需要依托任何的对象,即不需要实例化也可以 ...

  10. Spring Boot Failed to load resource: the server responded with a status of 404 ()

    出现错误: Failed to load resource: the server responded with a status of 404 () 但是其他页面正常显示: 原因: 浏览器看一下:  ...