node.js中结合redis实现session

这里的session机制很简单,用户登录之后,给用户生成一个session,包含用户的唯一编号ID,过期时间expires,以及用户的用户的sessionID。

创建了session之后,将session存放到redis数据库中,现在也只是测试了可以存放数据,并没有进行redis的进一步操作,今后将对redis进行集群操作,虽然小,但是一定要五脏俱全,会写两个类,一个专门用来写,针对主库,然后另一个专门用来读,针对从库。

这需要一个key值与redis从库的连接地址相关联,因为当存在多个key值时,读取是随机的,但是想想,又觉得没有必要,因为主库对从库是完全同步的,就是主库的数据会拷贝完整的一份到从库,先这样想着吧。

redis主要是用到了redis这个模块,模块很多的方法,现在只记录一下用到的:

/**
 * @description 存储hash结构的数据,同时设置数据的过期时间
 * @param {string} 键的名称
 * @param {json} 对应的值
 * @returns {undefined}
 */
exports.hmset = function (key, json, expires) {
    try {
        console.log("--hmset function begin--");
        client.hmset(key, json);
        if (expires) {
            client.expire(key,expires);
        }
        else {
            client.expire(key,60 * 30);
        }
    }
    catch (err) {
        console.log("lalalla:"+err);
    }
}

存值的时候要注意参数的格式,注意redis的错误提示,可以很快的定位问题

还有就是注意异步的特点,比如这里,虽然页面的代码在redis操作之后,但是页面重跳转之后,redis的操作才执行了。

页面跳转之后设置cache保存sessionID,然后当页面跳转的时候,通过读取redis看看sessionID是否存在,来判断用户信息是否过期,没有的话,就更新一下redis的过期时间,因为redis中设置了过期时间,所以sessionID不存在的话,就跳转用户到登录页面

........

时间: 2024-10-23 06:50:49

node.js中结合redis实现session的相关文章

node.js中结合redis实现session修改完善(2)

代码的设计比较乱,整理了jade模板之后,决定链接登录注册功能,但发现很多的实现都太凑合了,先修改了httpParam的get, post, cookie 方法.现在决定修改Session,因为session太无厘头了. 1. 结合的比较混乱 2. session和redis操作在一起,没有独立出去 3. session中存放的数据不明朗 4. session中设置了过期,其实没有必要,因为在redis中已经设置了过期时间 5. 页面切换的时候,没有对session过期时间进行更新 下面即之前的

Node.js中使用redis数据库的正确姿势

Redis是一个常用的Nosql数据库,一般用来代替Memcached做缓存服务,同时它也支持数据的持久化,有着比较广泛的应用场景.在Java中使用redis我们已经比较熟悉了,那么在node.js和koa.js框架中使用Redis的正确姿势是怎样的呢? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: * Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载

Node.js中的Session,不要觉得简单哦。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应每一小节的在线练习大家可以去试试. Cookie 在web应用中,多个请求之间共享“用户会话”是非常必要的.但HTTP1.0协议是无状态的.那这时Cookie就出现了.那Cookie又是如何处理的呢? Cookie的处理: 服务端向客户端发送Cookie 客户端的浏览器把Cookie保存 然后在每次

Cookie和Session在Node.JS中的实践(二)

Cookie和Session在Node.JS中的实践(二) cookie篇在作者的上一篇文章Cookie和Session在Node.JS中的实践(一)已经是写得算是比较详细了,有兴趣可以翻看,这篇是session篇,重点在讨论seesion的特性.概念,以及session和cookie的区别和联系. 之前有人问我,这个问题有必要长篇大论的探讨吗?其实只要我觉得这个技术点重要而且具有迷惑性,就值得去写.去探讨,否则你很难完全明白.写这种文章有两个好处: 首先,于作者而言,写出来文章让大家一起理解某

Node.js中的不安全跳转如何防御详解

Node.js中的不安全跳转如何防御详解 导语: 早年在浏览器大战期间,有远见的Chrome认为要运行现代Web应用,浏览器必须有一个性能非常强劲的Java引擎,于是Google自己开发了一个高性能的开源的Java引擎,名字叫V8.在2009年,Ryan正式推出了基于Java语言和V8引擎的开源Web服务器项目,命名为Node.js. 对于任何web开发人员来说,不安全或未经验证的重定向都是重要的安全考虑因素.Express为重定向提供了本地支持,使它们易于实现和使用.Express是一种保持最

在Node.js中使用RabbitMQ系列二 任务队列

在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心解决的问题是避免立即处理那些耗时的任务,也就是避免请求-响应的这种同步模式.取而代之的是我们通过调度算法,让这些耗时的任务之后再执行,也就是采用异步的模式.我们需要将一条消息封装成一个任务,并且将它添加到任务队列里面.后台会运行多个工作进程(worker process),通过调度算法,将队列里的任

Node.js权威指南 (10) - Node.js中的错误处理与断言处理

10.1 使用domain模块处理错误 / 272 10.1.1 domain模块概述 / 272 10.1.2 创建并使用Domain对象 / 274 10.1.3 隐式绑定与显式绑定 / 276 10.1.4 绑定回调函数与拦截回调函数 / 279 10.1.5 domain堆栈的弹出与推入 / 280 10.1.6 Domain对象的销毁 / 28610.2 Node.js中的断言处理 / 286 10.2.1 equal方法与notEqual方法 / 287 10.2.2 strictE

node.js中的交互式运行环境-REPL

<Node.js权威指南>第2章Node.js中的交互式运行环境--REPL 开发者可以在该环境中很方便地输入各种JavaScript表达式并观察表达式的运行结果. 在学习Node.js框架的过程中,通过该运行环境的使用,我们可以很方便地了解Node.js中定义的各种对象所拥有的各种属性及方法.本节为大家介绍在REPL运行环境中操作变量 2.2 在REPL运行环境中操作变量 在REPL运行环境中,可以使用var关键字来定义一个变量并为其赋值,但是在输入了对其赋值进行的表达式后,该表达式的执行结

node.js中的exports和module.exports

不同的编程语言都有各自的代码组织和复用的方式,如.net.php中的命名空间,python中的import,ruby中的module等,来避免命名空间污染.一直都没搞清楚node中的exports和module.exports的区别,借此搞清楚node的代码模块复用方式. 首先怎么创建node中的modules. 可以直接创建一个文件作为module,如下module.js function writeLine(){ console.log("module.js"); } export