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. 松软科技Web课堂:重要->JavaScript 调试

    错误总会发生,每当您写一些新的计算机代码时. JavaScript 调试 在没有调试器的情况下写 JavaScript 是有难度的. 您的代码中也许包含了语法错误,或者逻辑错误,这些都难以诊断. 通常 ...

  2. 利用Python多线程来测试并发漏洞

    需求介绍 有时候想看看Web应用在代码或者数据库层有没有加锁,比如在一些支付.兑换类的场景,通过多线程并发访问的测试方式可以得到一个结论. 步骤 1. Burp Suite安装插件 安装一个Copy ...

  3. c语言从入门到精通的几个阶段

    本文主要结合往期学员学习阶段,因材施教整理的几个阶段学习路线知识点: 1.初级教程 初级c语言入门教程比较适合零基础的小白,这个周期一般在22天,度过这个阶段的小白,基本上已经拥有了编程思维,且能开发 ...

  4. sql server 字符数据类型

    SQL Server 中字符类型包括varchar.char.text等.主要用于存储字符数据.varchar和char类型的主要区别在于数据填充.例如,一个列名为FirstName且数据类型为var ...

  5. C#本地文件下载以及FTP文件服务下载(以Pdf文件为例)

    一.C#实现本地文件下载 1.文件下载的路径  文件名称 以及文件下载之后要放的位置  这三个变量是必须要的 2.定义以下四个对象: FileWebRequest ftpWebRequest = nu ...

  6. 利用zabbix API 统计一段时间内监控项的均值和峰值

    #coding:utf-8 #给定主机IP获取一段时间内cpu的均值和峰值并写入文件(txt,可以跑完后直接把后缀名改为csv以表格形式打开):需要指定IP文件 import requests imp ...

  7. NuGet修改默认包保存的位置

    NuGet默认的全局包下载地址一般为:C:\Users\{username}\.nuget\packages 修改方法: <?xml version="1.0" encodi ...

  8. TP打印输出SQL语句

    模型 -> getLastSql(); //TP打印SQL语句 $data = $this->field($field)->where($condition)->select( ...

  9. python从小白到大咖方便查看链接

    直通BAT面试题 PyCharm快捷键 一.python基础 01 python基础 02python中基本数据类型以及运算符 03流程控制之if,while,for 04基本数据类型内置方法一 05 ...

  10. C++ 进阶笔记之一

    优化相关 使用灵活的.动态分配的数据,不要使用固定大小多数组: 优先使用线性算法或者尽可能快的算法: push_back 散列表查询:O(1) set/map lower_bound/upper_bo ...