koa学习之路七

之前的文章我们介绍了一下 koa koa-static静态资源中间件,本篇文章我们来看一下 koa 中 cookie 和 session 的使用。

cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域名的时候共享数据。

HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。

我们将之前项目中的 app.js 改为如下代码:

//引入 koa模块
const Koa = require(‘koa‘);
const Router = require(‘koa-router‘);
const views = require(‘koa-views‘);
const static = require(‘koa-static‘);

//实例化
const app = new Koa();
const router = new Router();

//配置静态资源中间件
app.use(static(__dirname + "/static"));

//配置模板引擎中间件
app.use(views(‘views‘, {
    extension: ‘ejs‘
}));

router.get(‘/‘, async (ctx) => {
    // 设置 cookie
    ctx.cookies.set(‘userinfo‘,encodeURIComponent(‘张三‘),{maxAge:10*1000})
    await ctx.render(‘index‘, {});
});

router.get(‘/news‘, async (ctx) => {
    // 获取 cookie
    console.log(decodeURIComponent(ctx.cookies.get(‘userinfo‘)));
    await ctx.render(‘index‘, {});
});

//启动路由
app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000);

我们在 router.get("/" ) 中通过 ctx.cookie.set() 的形式设置了一个 "userifon" 的 cookie ,然后在 router.get("/news" ) 中通过 ctx.cookie.get() 的形式来获取我们设置的 userinfo 的 cookie 值。

当我们运行 localhost:3000 后再运行 localhost:3000/news 时,我们在代码编辑器控制台可以看到如下输出结果:

从上图可以看出我们已经获取到了 userinfo = "张三" 的 cookie 值。

在 ctx.cookie.set() 中第三个参数为一个对象,里面有一些可选参数,如上面我们设置了一个 maxAge:10 * 1000;意思是该 cookie 值存储时间为 10 * 1000 毫秒,即 10 秒钟,在 10 秒之后会消失,还有其他可选参数,如下:

在上面的程序中,我们还用到了

encodeURIComponent 和 decodeURIComponent 

上面的两个名词分别表示对参数编码和解码,我们在传输数据的时候如果是汉字,如 "张三",就需要对其编码和解码,这样才能对内容做正确的传输。

接下来我们再看一下 koa 中 session 的使用。

session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生 成一个类似于 key,value 的键值对, 然后将 key(cookie)返回到浏览器(客户)端,浏览 器下次再访问时,携带 key(cookie),找到对应的 session(value)。 客户的信息都保存 在 session 中。

使用 koa 中的 session,我们需要安装 koa-session 的模块

npm install koa-session --save

我们将上面的 app.js 改为如下:

//引入 koa模块
const Koa = require(‘koa‘);
const Router = require(‘koa-router‘);
const views = require(‘koa-views‘);
const static = require(‘koa-static‘);
const session = require(‘koa-session‘);

//实例化
const app = new Koa();
const router = new Router();

//配置静态资源中间件
app.use(static(__dirname + "/static"));

//配置模板引擎中间件
app.use(views(‘views‘, {
    extension: ‘ejs‘
}));

//配置session的中间件
app.keys = [‘some secret hurr‘];   /**cookie的签名 默认*/
const CONFIG = {
    key: ‘koa:sess‘, /** 默认 */
    maxAge: 10000,  /**  cookie的过期时间 */
    overwrite: true, /** 默认 可以重写过期时间 */
    httpOnly: true, /**  true表示只有服务器端可以获取 cookie */
    signed: true, /** 默认 签名 */
    rolling: true, /** 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false) */
    renew: false, /** 当用户进行浏览器操作时刷新 cookie 过期时间 */
};
app.use(session(CONFIG, app));

router.get(‘/‘, async (ctx) => {
    // 设置 cookie
    ctx.session.userinfo=‘张三‘;
    await ctx.render(‘index‘, {});
});

router.get(‘/news‘, async (ctx) => {
    // 获取 cookie
    console.log(ctx.session.userinfo);
    await ctx.render(‘index‘, {});
});

//启动路由
app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000);

如上,我们需要在最开头引入我们的 koa-session 模块,然后设置 session 中间件。session 中也有类似于 cookie 的可选值,其中我们只需要修改 maxAge,rolling 和 renew 三个值即可。

  maxAge:过期时间,以毫秒为单位。

  rolling:当我们每次有浏览器请求时会重新刷新我们的 session 过期时间,是一个具体的时间值,如 12:00:00。

  renew:当我们每次有浏览器请求时会重新刷新我们的 session 过期时间,是一个时间范围,如 5000 毫秒。

接下来我们就可以在我们的浏览器中使用 session 了,我们在进入 localhost:3000 时设置一个 userinfo="张三",当进入 localhost:3000/news 时在代码编辑器后台打印输出这个 userinfo,如下:

我们拿到了 userinfo:"张三" 的值。

现在我们来看一下 cookie 和 session 的区别:

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

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

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

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

内容来自:https://www.cnblogs.com/weijiutao/p/10697933.html

原文地址:https://www.cnblogs.com/chao202426/p/11766482.html

时间: 2024-07-29 14:13:23

koa学习之路七的相关文章

koa学习之路一

首先我们先创建一个我们要开发的项目的目录中,然后运行  npm init ,为我们的项目起个名字,然后一路回车,这样就会在我们的项目目录中创建一个最基本的 package.json 的文件,接下来安装我们要使用的 koa 模块  npm install koa --save ,这样我们就引入了 koa 模块,接下来就和 Express 模块是一样的操作流程,我们在项目目录中创建一个 app.js,在 app.js 中写我们的程序就可以了. 最终创建的项目目录如下: 在 app.js 中写一个简单

koa学习之路二

一.Koa 路由 路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET.POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问. 通俗的讲:路由就是根据不同的 URL 地址,加载不同的页面实现不同的功能. Koa 中的路由和 Express 有所不同,在 Express 中直接引入 Express 就可以配置路由,但是在 Koa 中我们需要安装对应的 koa-router 路由模块来实现. npm install koa-router --save

Java学习之路(七)

1:什么是异常?  中断了正常指令流的事件. 异常是一个对象 ,在出现异常时,虚拟机会生成一个异常对象 生成对象的类是由 JDK 提供的 上图解释: Throwable 是所有异常类的基类 Error  是指虚拟机在运行时产生的错误,在出现错误时,虚拟机会关闭 Exception  指异常 RuntimeException   运行时异常(也可称为  uncheck Exception ). e.g : class Test{ public static void main(String arg

我的算法学习之路

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--反正最后考试划个重点也能过,于是这门整个计算机专业本

linux学习之路之vim编辑器的使用

本章将介绍vim编辑器的使用 vim编辑器是vi编辑器的增强版 vim是一种全屏的编辑器,是一种模式化的编辑器,之所以称为模式化的编辑器,因为vim有多种模式. 接下来将介绍vim主要的三种模式: 编辑模式(也叫命令模式):在该模式下你可以完成字符串跳转,字符串删除,翻屏操作等操作 输入模式:在该模式下输入的任何字符都会保存在该文件中,作为文件的一部分 末行模式:在该模式下,可以实现字符串搜索,字符串替换等操作 vim编辑器的三种模式之间的相互转换 模式转换: 编辑模式-->输入模式 i:在当前

MySQL数据库学习之路

MySQL学习之路 目录 MySQL学习之路[第一篇]:MySQL单双实例安装 MySQL学习之路[第二篇]:MySQL登陆关闭.密码修改破解 MySQL学习之路[第三篇]:MySQL增删改查.用户权授.系统函数.字段修改 MySQL学习之路[第四篇]:MySQL进程连接.交互.变量 MySQL学习之路[第五篇]:MySQL主健和索引 MySQL学习之路[第六篇]:MySQL存储引擎.事务.锁 MySQL学习之路[第七篇]:MySQL日志管理 MySQL学习之路[第八篇]:MySQL备份恢复 M

linux学习之路之bash及其特性

我们知道当我们用鼠标点击,或输入一个命令,系统就玩帮我们完成一个任务,那么当我们点击一个链接时,系统由是如何知道要去完成相应的操作呢?这是因为通过shell来完成的. 那么什么是shell呢? shell就是用户和操作系统之间的一个接口,通过这个接口shell接受来自用户的命令,并调用相应的应用程序来呼叫kernel来处理相应的工作. 在linux系统上面存放着多种类型的shell,这些shell存放在/etc/shells文件里,默认RedHat使用的shell为bash 下面介绍一些bash

Peng Gong:我的算法学习之路

原文出处: Lucida (@peng_gong) 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--

我的C语言学习之路——初装Linux(双系统模式)

我的C语言学习之路--初装Linux(双系统模式) 第一次听说Linux是在微软公布不再维护WindowXP系统,当时打开头条网,Linux几乎占据了头条,好奇之下,百度了Linux(Linux操作系统是UNIX操作系统的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日(这是第一次正式向外公布的时间)). 第二次听说Linux是在程序员联盟(微信公众号:programmerLeague)   讨论,这也是我真正接触Linux的时候.作为一个编程初学者,对一切有利于编译的软