koa2.js_session和cookie

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

	koa2实现session的两种方式(基于Redis 和MySQL)[数据库教程]

一.基于MySQL的实现方式

这种方式需要安装koa-session-minimal和koa-mysql-session两个依赖。

执行

npm install koa-session-minimal koa-mysql-session

项目配置:

复制代码
const session = require(‘koa-session-minimal‘);  
const MysqlStore = require(‘koa-mysql-session‘);
const config = require(‘./config/default.js‘);  // 数据库配置
const Koa = require(‘koa‘);
const app = new Koa();

// session存储配置
const sessionMysqlConfig = {
  user: config.database.USERNAME,
  password: config.database.PASSWORD,
  database: config.database.DATABASE,
  host: config.database.HOST,
};

 // 配置session中间件
app.use(session({
  key: ‘USER_SID‘,
  store: new MysqlStore(sessionMysqlConfig)
}));
复制代码

 

这种方式会自动在数据库建立一个表:

技术图片

在浏览器的cookie中会生成一个以 USER_SID 为键的cookie。通过ctx的session属性可以修改更新删除session的值。

缺点是每次对session的操作需要查询数据库,比较耗时。

 

二、基于Redis的实现方式

主要用到了koa-session2和ioredis。

npm install koa-session2 ioredis

项目配置:

复制代码
// redis
const session = require("koa-session2");
const Store = require("./config/Store");

// 使用redis作为session存储
app.use(session({
  store: new Store(),
  key: "SESSIONID",  // default "koa:sess"
}));

config/Store.js

const Redis = require("ioredis");
const { Store } = require("koa-session2");
const redisConfig = require(‘./redis‘);
 
class RedisStore extends Store {
    constructor() {
        super();
        this.redis = new Redis(redisConfig);
    }
 
    async get(sid, ctx) {
        let data = await this.redis.get(`SESSION:${sid}`);
        return JSON.parse(data);
    }
 
    async set(session, { sid =  this.getID(24), maxAge = 1000000 } = {}, ctx) {
        try {
            // Use redis set EX to automatically drop expired sessions
            await this.redis.set(`SESSION:${sid}`, JSON.stringify(session), ‘EX‘, maxAge / 1000);
        } catch (e) {}
        return sid;
    }
 
    async destroy(sid, ctx) {
        return await this.redis.del(`SESSION:${sid}`);
    }
}
 
module.exports = RedisStore;
复制代码

技术图片

 

 这样,每次登陆就可以通过Redis来存储会话信息,由于Redis直接是运行在内存中的,因此速度会比较快。

通过get key 即可查看相应的session信息。

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

原文地址:https://www.cnblogs.com/it-xiong/p/13451521.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6823.html

(0)
上一篇 2023-04-01
下一篇 2023-04-01

相关推荐

  • Python判断数组为空的方法

    Python判断数组为空的方法判断一个数组是否为空是开发中经常会遇到的问题,Python作为一门广泛应用的编程语言,提供了多种方法来判断数组是否为空。本文将详细阐述Python判断数组为空的方法,帮助读者更好地理解它们的用法。

    2024-05-17
    90
  • 用Python实现二进制转换

    用Python实现二进制转换在计算机科学中,二进制是一种基于二的数字系统,只使用0和1两个数字进行运算,是计算机中数据存储和通信的基础。在计算机中,所有的数字、字母、符号等元素都是使用二进制进行表示的,因此对二进制进行转换是计算机编程中必不可少的操作。

    2024-02-16
    133
  • 【赵强老师】数据库的事务

    【赵强老师】数据库的事务一、什么是事务? 数据库事务(Transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的

    2023-02-25
    147
  • sql数据库语言练习,增删改查[通俗易懂]

    sql数据库语言练习,增删改查[通俗易懂]数据库创建 DROP DATABASE IF EXISTS `sql_invoicing`; CREATE DATABASE `sql_invoicing`; USE `sql_invoicing`;

    2023-01-30
    153
  • Pycharm无法打开的解决方法

    Pycharm无法打开的解决方法有些用户在使用Pycharm的过程中,遇到了打开网页失败的情况。这种情况一般是由于网络原因引起的。首先,我们需要检查一下网络是否正常。可以打开浏览器,尝试访问别的网页。如果网络正常,还是无法打开网页,则需要检查一下代理设置。有些用户可能设置了代理,导致无法正常打开网页。可以在Pycharm设置中,将代理关闭。在Pycharm的”File”->”Settings”->”Appearance & Behavior”->”System Settings”->”HTTP Proxy”,将”HTTP Proxy”设置成”No Proxy”即可。

    2024-08-13
    28
  • 如何使用Anaconda安装cv2

    如何使用Anaconda安装cv2OpenCV(Open Source Computer Vision)是一个开源的计算机视觉库,用于处理图像和视频的相关操作。安装OpenCV的最简单的方法之一是使用Anaconda。本文将介绍如何使用Anaconda安装OpenCV的cv2模块。

    2024-06-09
    52
  • Python Dictionary:如何高效地管理和查询数据

    Python Dictionary:如何高效地管理和查询数据Python中的字典是一个非常强大的数据结构,它可以高效地存储和查询数据。在本文中,我们将深入探讨字典的特性、使用场景和一些小技巧,以帮助您更好地使用Python字典。

    2024-03-29
    74
  • 如何将数据库中的数据导成 excel 文件夹_excel表格数据库

    如何将数据库中的数据导成 excel 文件夹_excel表格数据库这个要看下具体格式,如果只是将数据库中的明细数据逐条导出到 excel 中的话,这个直接使用开源的 poi 就行,具体可以直接百度下,但是这种实际上没多大意义,大多数的需求是要求按照特定的格式导出,…

    2023-03-16
    155

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注