Session 简单介绍

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

Session 的工作流程

当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对, 然后将key返回到浏览器(客户)端并且保存到cookie中

浏览器下次再访问时,获取cookie,然后携带cookie(key),找到对应的session(value)。

客户的信息都保存在session中

koa-session 的使用

首先应用中安装 koa-session

npm install koa-session --save

然后将koa-session引入项目中

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

配置session的中间件

// 配置session的中间件
app.keys = ['some secret hurr']; // cookie的签名
const CONFIG = {
key: 'koa:sess', // 默认
maxAge: 10000, // cookie的过期时间
overwrite: true, //(boolean) can overwrite or not (default true) 没有效果,默认
httpOnly: true, // true表示只有服务器端可以获取cookie
signed: true, // 默认 签名
rolling: false, // 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
renew: true, // 在每次请求时强行设置 session,这将重置 session 过期时间(默认:false)
};
app.use(session(CONFIG, app));

使用session(设置和获取)

设置值 ctx.session.username = "张三";
获取值 ctx.session.username

创建一个node服务,app.js文件

let Koa = require('koa')
let router = require('koa-router')()
var session = require('koa-session'); var app = new Koa() // 配置session的中间件
app.keys = ['some secret hurr']; // cookie的签名
const CONFIG = {
key: 'koa:sess', // 默认
maxAge: 10000, // cookie的过期时间
overwrite: true, //(boolean) can overwrite or not (default true) 没有效果,默认
httpOnly: true, // true表示只有服务器端可以获取cookie
signed: true, // 默认 签名
rolling: false, // 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
renew: true, // 在每次请求时强行设置 session,这将重置 session 过期时间(默认:false)
};
app.use(session(CONFIG, app)); router.get('/',async (ctx)=>{
//获取session
ctx.body = '首页' + ctx.session.userinfo;
}) router.get('/news',async (ctx)=>{
//获取session
ctx.body = '新闻' + ctx.session.userinfo;
}) router.get('/login',async (ctx)=>{
// 设置session
ctx.session.userinfo = '张三';
ctx.body="登录成功";
}) app.use(router.routes()); /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000);

启动服务后,访问首页,第一次访问首页是没有设置session的

然后访问登录页面后,设置session,设置了session,客户端会自动设置两个cookie来保存session的key

当我再次访问首页,在session还没过期之前,就可以获取到session

访问任何页面都可以获取到session

Cookie 和 Session 区别

cookie 数据存放在客户的浏览器上,session 数据放在服务器上

cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗 考虑到安全应当使用 session

session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 COOKIE。

单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

Koa Session的使用的更多相关文章

  1. koa2实现session的两种方式(基于Redis 和MySQL)

    一.基于MySQL的实现方式 这种方式需要安装koa-session-minimal和koa-mysql-session两个依赖. 执行 npm install koa-session-minimal ...

  2. koajs项目之memcached实现session共享

    在做nodejs服务的负载时要考虑到session共享的问题,一般常用的就是memcached方式实现的,本文主要介绍通过npm社区的几个模块轻松实现这个功能. 做koa的session一般会想到用k ...

  3. koajs框架学习

    目录: 概述 hello world 中间件 路由中间件koa-router body解析中间件koa-bodyparser 授之以渔 一.概述 koa 是由 Express 原班人马打造的,致力于成 ...

  4. node项目实战-用node-koa2-mysql-bootstrap搭建一个前端论坛

    前言 在学习了koa2和express并写了一些demo后,打算自己写一个项目练练手,由于是在校生,没什么好的项目做,即以开发一个前端论坛为目标,功能需求参照一下一些社区拟定,主要有: 登录注册 个人 ...

  5. KoaHub平台基于Node.js开发的Koa的get/set session插件代码详情

    koa-session2 Middleware for Koa2 to get/set session use with custom stores such as Redis or mongodb ...

  6. koa 实现session登陆

    在我们访问一些网站内部内容的时候,通常都会先验证我们是否已经登陆,如果登陆了就跳转到内容页面否则就跳转或者弹出登陆页面. 但是HTTP协议是没有状态的协议,无法标识一个用户的登录状态. 于是Cooki ...

  7. koa 基础(十六)koa 中 session 的使用

    1.app.js /** * koa 中 session 的使用 * 1.npm install koa-session --save * 2.const session = require('koa ...

  8. Cookie、Session、JWT在koa中的应用及实现原理

    目录 Cookie 重要属性 实现原理 cookie签名实现原理 注意事项 Session 实现原理 JWT 使用方式 组成 实际应用 实现原理 前端存储方式 cookie session local ...

  9. koa简介

    资料来源:http://javascript.ruanyifeng.com/nodejs/koa.htmlhttp://koa.bootcss.com/ 以下内容为摘抄,纯属做笔记加深印象.勿喷. 使 ...

随机推荐

  1. 【转载】 C#中float、double以及decimal类型有何不同

    在C#语言中,float.double以及decimal类型都可以用来表示小数,但三者还是有一定的不同,有效数字为相比的话,decimal类型的有效数字最大,float类型最小.计算浮点类型的运算,如 ...

  2. 【转载】 C#中使用float.Parse方法将字符串转换为Float类型

    在C#编程过程中,很多时候涉及到数据类型的转换,例如将字符串类型的变量转换为单精度Float类型就是一个常见的类型转换操作,float.Parse方法是C#中专门用来将字符串转换为float类型的,f ...

  3. 学习笔记之盘一盘 Python 系列 1 & 2 - 入门篇

    盘一盘 Python 系列 1 & 2 - 入门篇 https://mp.weixin.qq.com/s?__biz=MzIzMjY0MjE1MA==&mid=2247486473&a ...

  4. HANA- SAP S4/HANA BP屏幕增强添加自定义字段(BDT方式)

    转载:https://www.cnblogs.com/hhelibeb/p/7412792.html 这里我们可以使用的技术是Business Data Toolset(以下简称BDT). 以下是网络 ...

  5. Java利用POI实现导入导出Excel表格示例代码

    转自:https://www.jb51.net/article/95526.htm 介绍 Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其 ...

  6. 技术圈术语之LDAP

    导语:阅读一些程序的文档时经常看到支持ldap,由于对这个协议不太熟悉,平时也没有用过,所以一直也没怎么留意,今天看rabbitmq的文档又发现了ldap相关的介绍,于是想把这个问题搞清楚. 一.LD ...

  7. PHP实现智能语音播报

    原文地址 https://www.jianshu.com/p/91a046ec6ebc 大家估计都知道现在很多AI音响能够给你播报天气,叫你起床...甚至能够接受语音指令!所谓的人工智能音响,听起来很 ...

  8. 【RMAN】RMAN脚本中使用替换变量

    [RMAN]RMAN脚本中使用替换变量--windows 下rman全备脚本 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

  9. 小程序的openid和公众号的openid是否一致

    早期的产品只用了公众号,没有注册开放平台(没有unionid).然后现在需要上线小程序,这种情况下,企业是同一个企业的,但是公众号的openid和小程序的openid是否一致呢? 我来回答你这个问题: ...

  10. 【Docker】docker安装GitLab

    一.下载镜像 docker pull gitlab/gitlab-ce 二.运行GitLab容器 1.生成启动文件 - start.sh 使用docker命令运行容器,注意修改hostname为自己喜 ...